2009-11-11 2 views
4

После работы с учебником Django я пытаюсь создать очень простое приложение для выставления счетов.Встроенное редактирование отношения ManyToMany в Django

Я хочу добавить несколько товаров в счет-фактуру и указать количество каждого продукта в форме «Счет-фактура» в администраторе Django. Теперь я должен создать новый объект Product, если у меня есть разные кванты одного и того же продукта.

Сейчас мои модели выглядеть следующим образом (модели компании и клиентов опущены):

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)) 

Я предполагаю, что количество должно быть оставлено из модели продукта, но как я могу сделать поле для него в модель счета-фактуры?

ответ

9

Необходимо изменить структуру модели. Как вы признаете, количество не относится к модели продукта - оно относится к отношениям между Продуктом и счетом-фактурой.

Чтобы сделать это в Django, вы можете использовать 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

Спасибо! Это именно то, что я искал. – vorpyg