我有一个在线商店。有单品可供购买,但也有一些套装包含一些单品。 现在我想为这些关系找到最好/最有用的解决方案。这就是我到目前为止所做的。
模型:
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)
答案 0 :(得分:1)
WineBox
和Product
都必须吗?似乎有点多余。为什么不更容易:
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)