Django,m2m与同型号

时间:2013-12-03 19:30:32

标签: python django django-models django-orm

我的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对象添加到单个订单?

每个订单可能包含多个产品(相同或不同)。

2 个答案:

答案 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")