Django:三个相互关联的模型,最好的方法是什么

时间:2013-04-14 01:14:50

标签: django many-to-many models relationship one-to-one

我有一个在线商店。有单品可供购买,但也有一些套装包含一些单品。 现在我想为这些关系找到最好/最有用的解决方案。这就是我到目前为止所做的。

模型:

class Wine(models.Model):
    name = models.CharField(max_length=128)

class WineBox(models.Model):
    name = models.CharField(max_length=128)
    wines = models.ManyToManyField(Wine)

class Product(models.Model):
    wine = models.OneToOneField(Wine, blank=True, null=True)
    winebox = models.OneToOneField(WineBox, blank=True, null=True)
    price = models.DecimalField(max_digits=4, decimal_places=2)
    public = models.BooleanField(blank=True)

2 个答案:

答案 0 :(得分:1)

WineBoxProduct都必须吗?似乎有点多余。为什么不更容易:

class Wine(models.Model):
    name = models.CharField(max_length=128)

class Product(models.Model):
    wine = models.ForeignKey(Wine)
    winebox = models.ManyToManyField(Wine)
    price = models.DecimalField(max_digits=4, decimal_places=2)
    public = models.BooleanField(blank=True)

这看起来仍然多余,我宁愿从wine中移除Product字段,只留下:

class Product(models.Model):
    wines = models.ManyToManyField(Wine)
    price = models.DecimalField(max_digits=4, decimal_places=2)
    public = models.BooleanField(blank=True)

希望它有所帮助。

答案 1 :(得分:0)

感谢所有的帮助,但最后我提出了一个非常简单的解决方案,完全符合我的需求。我不想使用通用关系,因为我可以控制所有模型并且它们使一切变得复杂,或者Cartucho解决方案,因为我可能希望以后有更多的产品。我使用Product作为基类,现在模型看起来像:

class Product(models.Model):
    price = models.DecimalField(max_digits=4, decimal_places=2)
    public = models.BooleanField(blank=True)

class Wine(Product):
    name = models.CharField(max_length=128)

class WineBox(Product):
    name = models.CharField(max_length=128)
    wines = models.ManyToManyField(Wine)