Встроенное редактирование отношения ManyToMany в Django - PullRequest
4 голосов
/ 11 ноября 2009

После прохождения учебника по 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))

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

1 Ответ

9 голосов
/ 11 ноября 2009

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

Для этого в 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)
...