我的django应用程序中有以下模型:
产品型号:
class Product(BaseModel):
company = models.ForeignKey(Company, null=True, blank=True)
title = models.CharField(max_length=128,verbose_name="Product title")
订单型号:
class Order(BaseModel):
company = models.ForeignKey(Company)
products = models.ManyToManyField(Product)
我无法在订单中添加多个相同的产品。 例如,我有一个名为“Car”的产品,如何将多个Car对象添加到单个订单?
每个订单可能包含多个产品(相同或不同)。
答案 0 :(得分:1)
您需要使用第三个表来执行该任务,例如:
class OrderProduct(BaseModel):
order = models.ForeignKey(Order)
product = models.ForeignKey(Product)
quantity = models.IntegerField()
然后您可以使用中间表https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany
class Order(BaseModel):
company = models.ForeignKey(Company)
products = models.ManyToManyField(Product, through='OrderProduct')
与普通的多对多字段不同,您不能使用添加,创建或分配(即order.products.add(prod)
)来创建关系。您应该在through
表中手动创建记录:
prod = Product.objects.get(uuid=product)
#order.products.add(prod)
q = product_quantity
order = order # order record must be created before
OrderProduct.objects.create(order=order, product=prod, quantity=q)
检查这个问题:
答案 1 :(得分:0)
与外键的多对多关系向后工作。您的订单模型中不需要外键。您需要的是链接到订单的产品型号中的外键(每个产品都有订单):
class Product(BaseModel):
company = models.ForeignKey(Company, null=True, blank=True)
order = models.ForeignKey(Order)
title = models.CharField(max_length=128,verbose_name="Product title")