Встроенное редактирование отношения ManyToMany в Django

Поработав с учебником 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))

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


person vorpyg    schedule 11.11.2009    source источник


Ответы (1)


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

Для этого в Django вы можете использовать Связь ManyToMany с through таблицей:

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)
person Daniel Roseman    schedule 11.11.2009
comment
Спасибо! Это именно то, что я искал. - person vorpyg; 12.11.2009