2009-11-11 10 views
4

Après avoir travaillé sur le tutoriel Django, j'essaie maintenant de créer une application de facturation très simple.Modification en ligne de la relation ManyToMany dans Django

Je souhaite ajouter plusieurs produits à une facture et spécifier la quantité de chaque produit dans le formulaire Facture de l'administrateur Django. Maintenant, je dois créer un nouvel objet Product si j'ai des quantités différentes du même produit.

En ce moment, mes modèles se présentent comme suit (Société et modèles clients laissés):

class Product(models.Model): 
    description = models.TextField() 
    quantity = models.IntegerField() 
    price = models.DecimalField(max_digits=10,decimal_places=2) 
    tax = models.ForeignKey(Tax) 

class Invoice(models.Model): 
    company = models.ForeignKey(Company) 
    customer = models.ForeignKey(Customer) 
    products = models.ManyToManyField(Product) 
    invoice_no = models.IntegerField() 
    invoice_date = models.DateField(auto_now=True) 
    due_date = models.DateField(default=datetime.date.today() + datetime.timedelta(days=14)) 

je suppose que la quantité doit être laissée hors du modèle de produit, mais comment puis-je faire un champ pour en le modèle de facture?

Répondre

9

Vous devez modifier légèrement la structure de votre modèle. Comme vous le savez, la quantité n'appartient pas au modèle de produit - elle appartient à la relation entre le produit et la facture.

Pour ce faire, dans Django, vous pouvez utiliser un ManyToMany relationship with a through table:

class Product(models.Model): 
    ... 

class ProductQuantity(models.Model): 
    product = models.ForeignKey('Product') 
    invoice = models.ForeignKey('Invoice') 
    quantity = models.IntegerField() 

class Invoice(models.Model): 
    ... 
    products = models.ManyToManyField(Product, through=ProductQuantity) 
+0

Merci! C'est exactement ce que je cherchais. – vorpyg