Save related forms Django

0

At first I wanted to make a dynamic form in Django, but I found it impossible using only Django ... so now I decided to create several forms from their own Form and render them in different but consecutive templates, my question is how can I save the list of such forms using Class Based Views. I have the following:

Models.py

class Url_activity (models.Model):
    url_de_la_actividad = models.URLField()
    nombre_url = models.CharField(max_length=10, null=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    def __unicode__(self):
        return self.url_de_la_actividad

class ActivityProposed (models.Model):
    nombre_actividad = models.CharField(max_length=50)
    fullname_profesor = models.CharField(max_length=100, null=True, blank=True)
    detalle_de_la_actividad = models.TextField()
    metodologia = models.CharField(max_length=50)
    foreing_competence = models.ForeignKey(CompetenceProposed, on_delete=models.CASCADE, null=True, blank=True)
    foreign_url = models.ForeignKey(Url_activity, on_delete=models.CASCADE, null=True, blank=True)
    foreign_comment = models.ForeignKey(CommentsActivityProposed, on_delete=models.CASCADE, null=True, blank=True)
    nombre_del_curso = models.CharField(max_length=50)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False, null=True)
    lastModification = models.DateTimeField(auto_now_add=False, auto_now=True, null=True)
    foreing_activity = models.ForeignKey(Activity, on_delete=models.CASCADE, null=True, blank=True)
    def __unicode__(self):
        return self.nombre_actividad

forms.py

class ActivityProposedForm(forms.ModelForm):

    class Meta:
            metodologias_choices = [(metodologia.id, metodologia.methodology_name) for metodologia in Methodology.objects.all()]
            normas_choices = [(normas.id, normas.norm_name) for normas in Norm.objects.all()]

            model = ActivityProposed

            fields = [
                'nombre_actividad', 'detalle_de_la_actividad', 'metodologia', 
                'nombre_del_curso']

            labels = {
                'nombre_actividad': 'Nombre de la Actividad',
                'detalle_de_la_actividad': 'Detalle de la Actividad',
                'metodologia': 'Metodologia',
                'nombre_del_curso': 'Nombre del Curso'
            }

            widgets = {
                'nombre_actividad': forms.TextInput(attrs={'class': 'form-control'}),
                'detalle_de_la_actividad': forms.Textarea(attrs={'class': 'form-control', 'rows': '3'}),
                'metodologia': forms.Select(attrs={'class': 'select'}, choices=metodologias_choices),
                'nombre_del_curso': forms.TextInput(attrs={'class': 'form-control'}),
            }



class ActivityUrl_activity(forms.ModelForm):

       class Meta:
        model = Url_activity
        fields = (
            'url_de_la_actividad', 'nombre_url')

        labels = {
            'url_de_la_actividad': 'URL de la Actividad',
            'nombre_url': 'Nombre del Boton a la URL'
        }

        widgets = {
            'url_de_la_actividad': forms.URLInput(),
            'nombre_url': forms.TextInput(attrs={'class': 'form-control'})
        }

views.py

class CreateActivityProposed(CreateView):
    template_name = 'registerActivity.html'
    form_class = ActivityProposedForm

    def get_success_url(self):
        return reverse_lazy('actividades:createurl')

class CreateURLProposed(CreateView):
    template_name = 'urlForm.html'
    form_class = ActivityUrl_activity

Any ideas? Greetings !!!

    
asked by Oscar Acevedo Osses 24.01.2018 в 20:12
source

1 answer

0

Add foreign_url to the fields of ActivityProposeForm with this Django will render the template and show you a drop-down list with the Url_activity that you have available and when saving the form Django relates them.

You should stay more or less like this:

class ActivityProposedForm(forms.ModelForm):

    class Meta:
        metodologias_choices = [(metodologia.id, metodologia.methodology_name) for metodologia in Methodology.objects.all()]
        normas_choices = [(normas.id, normas.norm_name) for normas in Norm.objects.all()]

        model = ActivityProposed

        fields = [
            'nombre_actividad', 'foreign_url', 'detalle_de_la_actividad', 'metodologia', 
            'nombre_del_curso']

        labels = {
            'nombre_actividad': 'Nombre de la Actividad',
            'detalle_de_la_actividad': 'Detalle de la Actividad',
            'metodologia': 'Metodologia',
            'nombre_del_curso': 'Nombre del Curso'
        }

        widgets = {
            'nombre_actividad': forms.TextInput(attrs={'class': 'form-control'}),
            'detalle_de_la_actividad': forms.Textarea(attrs={'class': 'form-control', 'rows': '3'}),
            'metodologia': forms.Select(attrs={'class': 'select'}, choices=metodologias_choices),
            'nombre_del_curso': forms.TextInput(attrs={'class': 'form-control'}),
        }
    
answered by 24.01.2018 в 21:42