Partage
  • Partager sur Facebook
  • Partager sur Twitter

Creer formulaire avec ajout de champs

Django, models, forms, addnew

    3 mars 2021 à 10:56:53

    Bonjour,

    Je souhaite créer un formulaire qui contient une partie ou en appuyant sur un bouton, un groupe de champs serait ajouté en double

    Exemple:

    -nom

    -prenom

    ----------

    -voiture

    -plaque

    Add voiture

    ----------

    En appuyant sur "Add voiture" je souhaite que les champs voiture et plaque soit ajoutés en dessous dans le formulaire.

    Pour le moment je sais le faire pour le formulaire complet. Lors de l'enregistrement dans la bdd, cela créer deux lignes spécifique.

    Comment créer un formulaire avec la répétition de 2 (ou plusieurs champs) ?

    Grosse inconnue, comment doivent etre conçut le/les models pour relier l'ensemble ? Une table ou plusieurs tables ?

    Merci à vous

    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2021 à 14:27:38

      si tu sais le faire pour un formulaire complet, c'est le même principe pour une partie du formulaire (ou sous-formulaire) , non ? 

      pour la base, une table pour la personne avec un champ ID_Personne, une table pour la voiture qui reprend ID_Personne (clé étrangère)

      • Partager sur Facebook
      • Partager sur Twitter
        4 mars 2021 à 10:07:18

        Bonjour,

        J'ai réussi en partie, mais je n'arrive pas a passer l'ID de ma premiere table à la suivante, a mettre l'utilisateur de maniere automatique dans demandeur, auparavant je faisait request.user.id, mais là comment faire ...:

        models.py

        class Responsable(models.Model):
            objet = models.CharField(max_length=100, blank=True)
            nom = models.TextField(blank=True)
            date_creation = models.DateTimeField(auto_now_add=True, null=True)
            demandeur = models.ForeignKey(User,null=True, related_name='demandeur')
            priorite = models.ForeignKey(PrioriteTicket,null=True)
            etat = models.ForeignKey(EtatTicket,null=True)
        
            def __unicode__(self):
                return unicode(self.objet)
        
        class Voiture(models.Model):
            proprietaire = models.ForeignKey(Responsable,null=True)
            plaque = models.CharField(max_length=10)
            type_roue = models.CharField(max_length=10)


        forms.py

        ResponsableFormSet = modelformset_factory(
            Responsable, fields=('objet', 'nom', 'demandeur', 'priorite', 'etat'), extra=1
        )
        VoitureFormSet = modelformset_factory(
            Voiture, fields=('proprietaire', 'plaque','type_roue'), extra=1
        ) 

        views.py

        class ResponsableView(ListView):
            model = MissionTicket
            template_name = "bird_list.html"
        
        # View for adding birds
        class ResponsableAddView(TemplateView):
            template_name = "add_bird.html"
        
            def get(self, *args, **kwargs):
                formset = ResponsableFormSet(queryset=Responsable.objects.none())
                vdformset = VoitureFormSet(queryset=Voiture.objects.none())
                
                return self.render_to_response({'bird_formset': formset, 'vd':vdformset})
        
            # Define method to handle POST request
            def post(self, *args, **kwargs):
        
                formset = ResponsableFormSet(data=self.request.POST)
                vdformset = VoitureFormSet(data=self.request.POST)
        
                # Check if submitted forms are valid
                if formset.is_valid() and vdformset.is_valid():
                    formset.save()
                    
                    vdformset.save()
        
        
                    return redirect(reverse_lazy("bird_list"))
        
                return self.render_to_response({'bird_formset': formset, 'vd':vdformset})




        • Partager sur Facebook
        • Partager sur Twitter
          4 mars 2021 à 16:41:48

          dans ton modèle Voiture, tu lis une ligne de Responsable à un voiture (le propriétaire de la voiture est le Responsable) et dans Responsable, tu as le demandeur qui est lié à la User. Je pense qu'il y a un petit problème de conception de la base.

          Sinon, dans ton formulaire, tu dois avoir toutes les infos, il suffit de les donner aux bons champs des bases.

          • Partager sur Facebook
          • Partager sur Twitter
            5 mars 2021 à 10:38:08

            Bonjour,

            c'est bon, j'arrive à récupérer l'ID de ma première table après enregistrement et à la passer à la suivante, ainsi qu'à enregistrer l'utilisateur connecté.

            Merci, je rajouterai le code de solution, pour ceux que cela pourrait intéresser.

            • Partager sur Facebook
            • Partager sur Twitter

            Creer formulaire avec ajout de champs

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown