Django中ManyToMany关系的行内编辑
在完成Django的教程后,我现在想创建一个非常简单的发票应用程序。
我想在发票中添加多个产品,并在Django管理后台的发票表单中指定每种产品的数量。现在,如果我有同一种产品的不同数量,我就必须创建一个新的产品对象。
目前我的模型看起来是这样的(公司和客户模型省略了):
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
你需要稍微调整一下你的模型结构。正如你所意识到的,数量这个信息并不应该放在产品模型里,而是应该放在产品和发票之间的关系中。
在Django中,你可以使用一个带有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)