Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Formulaire avec des relations many2many et une table intermédiaire

#1 12-10-2011 15:50:38

frague
Membre
Inscription : 29-11-2010
Messages : 24

Formulaire avec des relations many2many et une table intermédiaire

Bonjour,

Je suis en train de développer une appli django, et je sèche sur un formulaire.

Les modèles :

class FournitureDemande(Demande):
    '''
    Demande de fourniture d'articles
    '''
    articles = models.ManyToManyField(FournitureArticle,
                                      name='articles',
                                      verbose_name=u'articles',
                                      through='FournitureArticleDemande',)

class FournitureArticle(models.Model):
    '''
    Articles de fournitures
    '''
    class Meta:
        ordering = ('label',)
        verbose_name = u'Article de fourniture'
        verbose_name_plural = u'Articles de fourniture'

    label = models.CharField(name='label',
                             verbose_name=u"Libellé",
                             max_length=256,)


class FournitureArticleDemande(models.Model):
    '''
    Table de relation entre les demandes de fournitures et les articles. 
    '''

    demande = models.ForeignKey('FournitureDemande',
                                name='fourniture_demande', verbose_name=u'Demande',
                                related_name='fourniture_demande_fourniturearticledemande',)

    article = models.ForeignKey('FournitureArticle',
                                name='fourniture_article', verbose_name=u'Article',
                                related_name='fourniture_article_fourniturearticledemande',)

    quantite = models.IntegerField(name='quantite', verbose_name=u'Quantité',
                                   default=0,)

    def __unicode__(self):
        return '%s : %s pièce(s)' % (self.article, self.quantite)

Je peux créer mon formulaire pour la création de la demande, pas de soucis là dessus.
Une fois la demande crée, je souhaiterai afficher une liste de mes articles (20 en tout, l'affichage me convient) et pour chaque ligne pouvoir saisir une quantité désirée.
Si la quantité est nulle, je n'enregistre pas la ligne, mais dans le cas contraire je crée la relation (demande, article, quantité) dans la table de relation.

Je me suis battu avec les formsets, mais je n'obtiens rien de concluant... J'utilise des class basedde préférencedes class based views, mais ce n'est pas obligatoire, je suis à l'aise aussi avec les formulaires 'de base'.

Quelqu'un aurait-il une idée de comment procéder ?

Merci d'avance !

frague


frague

Hors ligne

#2 21-10-2011 17:14:59

Keabard
Membre
Inscription : 12-09-2011
Messages : 5

Re : Formulaire avec des relations many2many et une table intermédiaire

Salut à toi.

D'après ce que j'ai compris, tu remplis un formulaire de création de FournitureDemande en cochant les FournitureArticle que tu souhaites voir figurer dans cette FournitureDemande.

Ensuite, tu veux avoir un formulaire pour la FournitureDemande que tu viens de créer, et qui liste tous les FournitureDemande.articles avec une casé à côté de chaque pour demander une quantité ?

Quand la valeur de la case est supérieure à 0, tu créeras dans une view une FournitureArticleDemande liant chaque FournitureArticle et leur quantité avec la FournitureDemande.


Le cas échéant, je te conseille d'initialiser un formulaire avec en argument ta FournitureDemande. Ensuite, dans ton __init__(), tu créés à la volée les champs du formulaire en parcourant les FournitureDemande.articles de cette façon :

class ArticlesParDemandeForm(forms.Form):

    def __init__(self, fourniture_demande, *args, **kwargs):

        for article in fourniture_demande.articles:
            self.fields['article_%s'%article.id] = forms.IntegerField(label = article.label, empty_value = 0, required = True)

Tu obtiendras donc un formulaire avec un champ IntegerField par FournitureArticle dans ta FournitureDemande, où tu pourras renseigner la quantité désirée pour chacun des FournitureArticle.

Je pense que le templating et la vue derrière sont implicites wink


J'espère t'avoir aidé.

Dernière modification par Keabard (21-10-2011 17:39:52)

Hors ligne

  • Accueil
  • » Django-fr
  • » Formulaire avec des relations many2many et une table intermédiaire

Pied de page des forums