Django,m2m同型号

2024-04-19 14:35:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的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对象添加到单个订单中?你知道吗

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


Tags: django订单模型true应用程序产品titlemodels
2条回答

与外键的多对多关系是反向工作的。在订单模型中不需要外键。您需要的是产品模型中链接到订单的外键(每个产品都有一个订单):

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

您需要为该任务使用第三个表,例如:

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')

与普通的多对多字段不同,不能使用add、create或assignment(即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)

检查以下问题:

相关问题 更多 >