Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Résolu] [Django] Formulaire lié à deux tables

    2 mars 2019 à 11:53:11

    Bonjour,

    Je suis en train de faire un site avec le framework django, et je rencontre un problème. Tout d'abord, j'ai deux tables une "produit" qui contient l'ensemble de mes produits, par exemple :

    • tee-shirt
    • jean
    • chaussure

    Puis, j'ai une table commande qui est destinée à accueillir la commande de chaque personne, on a donc : id_utilisateur/ id_produit/ quantité. Par exemple : 

    • 1 / 2/ 3
    • 2/ 1/ 4
    • etc ...

    Or, j'aimerais créer un formulaire qui permette d'afficher (dans un tableau) le nom des produits, puis un champs de formulaire permanentant de commander la quantité voulu !!

    J'ai pas mal essayé avec les formulaires groupés, mais je n'ai pas réussi.

    Avez-vous une idée ?

    Merci d'avance

    -
    Edité par Da-max 24 mars 2019 à 13:16:31

    • Partager sur Facebook
    • Partager sur Twitter

    Da-max

      4 mars 2019 à 16:15:38

      Je n'ai pas vraiment compris... Si tu veux gérer plusieurs tableaux, comme une sorte de base de donnée, je te conseille d'apprendre SQL. Sinon, je voudrais bien t'aider, mais je ne comprends pas trop...

      -
      Edité par bergiLeZÉR0 4 mars 2019 à 16:18:22

      • Partager sur Facebook
      • Partager sur Twitter

      "I believe in two things. Discipline and the Bible." The Shawshank Redemption

        7 mars 2019 à 14:49:32

        tu peux agir dans le template que tu renvoi ..

        en passant par exemple variable à ton template.. et puis voir comment bien appliquer le css..

        {% extends 'layout/base.html' %}
        {% block body %}
         <table><td>nom_colone<tr>{{data}}</tr></td></table>
            <form action="{% url "index" %}" method="post">
                {% csrf_token %}
                {{ form.as_p }}
                <input type="submit" value="Submit" />
            </form>
        {% endblock %}



        -
        Edité par Hartnel Tamghuo 7 mars 2019 à 14:52:00

        • Partager sur Facebook
        • Partager sur Twitter
          7 mars 2019 à 17:29:37

          Si tu pouvais poster tes models complet, je peux t'aider.

          Tu souhaite afficher un tableau qui te permet de lister tes produit, et de les commander en indiquant une quantité, c'est bien ça ?

          • Partager sur Facebook
          • Partager sur Twitter

          https://www.lamontagnesolitaire.fr - Toute l'actualité de la Terre du Milieu

            16 mars 2019 à 14:03:37

            Bonjour,

            Désoler pour ma réponse aussi tardive.

            GrandGTO a écrit:

            Si tu pouvais poster tes models complet, je peux t'aider.

            Tu souhaite afficher un tableau qui te permet de lister tes produit, et de les commander en indiquant une quantité, c'est bien ça ?


            C'est exactement cela.

            Voici mes models :

            from django.db import models
            from django.contrib.auth.models import User
            
            class Produit(models.Model):
                nom = models.CharField(verbose_name="Nom du produit", max_length=255)
                prix = models.FloatField(verbose_name="Prix du produit")
                afficher = models.BooleanField(verbose_name="Afficher le produit ?", help_text="Si vous voulez que le produit soit afficher, rentrer 1 sinon 0 !!")
                poids = models.FloatField(verbose_name="Poids du produit", help_text="Si le produit peut être vendu en plus petite quantitées")
                maximun = models.IntegerField(verbose_name="Qunatité maximun du produit", help_text="Quantité maximun commandable par une seul personne", default=100)
                step = models.FloatField(verbose_name="Incrémentation", help_text="Rentrer ici de combien voulez-vous que la quantité augmente à chaque clique de l'utilisateur", default=1)
                
                def __str__(self):
                    return self.nom
            
            class Commande(models.Model):
                utilisateur = models.ForeignKey(User, on_delete=models.CASCADE, related_name="utilisateur")
                produit = models.ForeignKey("Produit", on_delete=models.CASCADE, related_name="produit")
                quantité = models.FloatField(verbose_name="Quantités du produit", default=0)
                
                def __str__(self):
                    return "{0} commandé {1} par {2}".format(self.produit.nom, self.quantité, self.utilisateur.username)

            Mon but est de crée un formulaire en django (donc de juste faire dans ma vue {{ form.as_p }} ) afin d'afficher le formulaire complet, listant les produits et affichant un champs input pour rentrer la quantité.

            Merci d'avance

            • Partager sur Facebook
            • Partager sur Twitter

            Da-max

              20 mars 2019 à 14:23:14

              Créer un formulaire Django est relativement simple pour faire quelque chose de basique.

              Par contre, je ne saurais pas spécialement te dire si cela est possible que form.as_p te retourne un tableau qui intègre un formulaire. Car ici, il s'agit bien d'un tableau qui dépend d'un formulaire ou inversement. Tu peux voir de ce côté-là sur le manuel Django : https://docs.djangoproject.com/en/1.9/topics/forms/formsets/

              Personnellement, ce que je ferai à te place, c'est de passer par quelque chose de plus classique et plus facile (selon moi)

              Rien ne t'empêche de créer tout ça directement dans ton template en HTML.

              Par exemple :

              <form method="POST" action="">
              {%csrf_token %}
              <input type="" name="Produit" value="{{ValeurProduit}}"> 			
              </form>

              Et dans ta vue, tu peux récupérer tout cela :

              if request.method == 'POST':
              	if 'Produit' in request.POST:
                          produit = request.POST['Produit']             
                          #Fais ce que tu veux avec la donnée ici

              A bien y regarder, tu as surtout un problème dans la conception de ton modèle Commande.

              Comme tu l'écris, ça veut dire qu'une commande est composée d'un utilisateur, un produit et une quantité. Mais si je veux commander plusieurs produits ? Ta logique veut qu'il faut créer une seconde ligne dans la base de données qui inscrira mon nom et deuxième produit et sa quantité. Mais alors, comment identifier ma commande dans sa totalité au final ? Il n'y a aucun numéro de commande !

              La logique de Django voudrait que ton modèle utilise un ManyToManyField:

              class Commande(models.Model):
                  numero = models.IntergerField()
                  utilisateur = models.ForeignKey(User, on_delete=models.CASCADE, related_name="utilisateur")
                  produit = models.ManyToManyField("Produit")
                  quantité = models.FloatField(verbose_name="Quantités du produit", default=0)
              

              Sauf que, tu as autre problème aussi, la quantité. Chaque produit doit avoir une quantité propre. Ça devient un peut trop complexe pour moi, mais si je ne dis pas de bêtise, ton modèle au final doit être comme cela :

              class Commande(models.Model):
              	numero = models.IntergerField()
              	utilisateur = models.ForeignKey(User, on_delete=models.CASCADE, related_name="utilisateur")
              	produit = models.ManyToManyField(Produit, through='Quantite')
              
              class Quantite(Models.Model)
              	produit = models.ForeignKey(User, on_delete=models.CASCADE, related_name="utilisateur")
              	quantite = models.IntegerField()

              -
              Edité par GrandGTO 20 mars 2019 à 15:52:17

              • Partager sur Facebook
              • Partager sur Twitter

              https://www.lamontagnesolitaire.fr - Toute l'actualité de la Terre du Milieu

                24 mars 2019 à 13:16:08

                Merci beaucoup pour ta réponse, j'ai un peu modifié tes classes et j’obtiens ceci :

                class Produit(Model):
                    nom = CharField(max_length=255, verbose_name="Nom du produit")
                    description = RichTextField(null=True)
                    prix = FloatField(default=1)
                
                class Commande(Model):
                    numero = IntegerField()
                    utilisateur = ForeignKey(User, on_delete=CASCADE, related_name="utilisateur")
                    produit = ManyToManyField(Produit, through='Quantite')
                 
                class Quantite(Model):
                    produit = ForeignKey(Produit, on_delete=CASCADE, related_name="produit")
                    commande = ForeignKey(Commande, on_delete=CASCADE, related_name="commande")
                    quantite = IntegerField()
                


                Ça marche nickel pour mon utilisation, merci beaucoup !

                • Partager sur Facebook
                • Partager sur Twitter

                Da-max

                [Résolu] [Django] Formulaire lié à deux tables

                × 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