2017-06-02 27 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)