2013-12-03 89 views
1

我已經按照我的Django應用程序模型:Django中,M2M與同型號

產品型號:

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對象添加到單個訂單中?

每個訂單可能包含多個產品(相同或不相同)。

回答

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) 

檢查這個問題:

+0

如何添加要訂購的產品?在此更改之前,我使用的代碼是: '產品中的產品: prod = Product.objects.get(uuid = product) order.products.add(prod)' – dease

+0

@dease我已更新答案 – ndpu

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

但每一個訂單可以包含多個(不同或不)的產品。用你的代碼,它不會工作。 – dease