2017-06-02 26 views
0

我試圖讓產品的庫存系統像輪胎/管。django unique_together與三個字段 - 意外的「已存在」錯誤

卡車尼龍,吉普尼龍,吉普徑向,汽車尼龍,汽車徑向等類別很多,每個類別下都會有很多規格名稱的產品,如825.20.16,900.20.14,135/70R12等等。

對於每個規格,都會有不同的製造商。徑向型輪胎下的一些規格可能有兩種變型管式輪胎&無內胎輪胎。

這是我的模型。

class Category(MPTTModel): 
    name=models.CharField(max_length=75,null=False,blank=False, unique=True) 
    parent=TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)  

    def __str__(self): 
     return self.name  

PRODUCT_TYPE=(('TL','Tubeless Tyre'), ('TT','Tubed Tyre'), ('NA','Not applicable')) 

class Product(models.Model):  
    name = models.CharField(max_length=30,null=False, blank=False) 
    category=TreeForeignKey(Category, null=False,blank=False)  

    def __str__(self):  
     return '%s = %s' % (self.name,self.category.name) 

    class Meta:   
     ordering=['category']  
     **unique_together = ('name', 'category')** 

class ProductStock(models.Model): 
    product=models.ForeignKey(Product,null=False,blank=False) 
    manufacturer=models.OneToOneField(Manufacturer, null=False,blank=False)  
    product_type=models.CharField(max_length=2, choices=PRODUCT_TYPE,) 
    opening_stock=models.PositiveIntegerField(default=0) 

    def __str__(self):  
     return '%s (%s) stock = %d ' % (self.product, self.manufacturer, self.opening_stock)  

    class Meta:   
     ordering=['manufacturer']  
     **unique_together = ('product', 'manufacturer','product_type')** 

請參閱最後一個unique_together。我需要確保任何製造商在任何規格下都不會有任何重複的Tubeless或Tubed-tire。

我已添加如下所示的股票。

> Car Radials => 135/70R12 
> Manufacturer: CEAT 
> Type: Tubeless Opening 
> stock: 5 

現在,當我嘗試輸入帶套輪胎型庫存對於上述一組參數,(汽車子午線輪胎=> 135/70R12,製造商:CEAT,類型:帶套輪胎,股票:5)我得到以下錯誤。

該產品,製造商和產品類型的產品庫存已經存在。

product_stock表中只有一個條目。

我無法弄清楚這裏出了什麼問題。任何幫助將不勝感激。

感謝

PS:有使用代碼標記了一些麻煩 - 對不起。

+1

如果你的'manufacturer'字段是'OneToOne',那麼我的想法是,你只能有那些'ProductStock'之一。 –

+0

請顯示您用於創建該項目的確切代碼。正如馬特所說,製造商當然應該是一個ForeignKey,而不是OneToOneField,儘管這不會導致你的錯誤。 –

回答

1

改變這一行

manufacturer=models.OneToOneField(Manufacturer, null=False,blank=False) 

manufacturer=models.ForeignKey(Manufacturer, null=False,blank=False)