在Django中内联编辑ManyToMany关系

时间:2009-11-11 12:49:49

标签: python django django-admin inline-editing

在完成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 个答案:

答案 0 :(得分: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)