1

我有一个网上商店。有单品要买,但也有一些套装包含其中一些单品。现在我正在尝试为这些关系找到最佳/有用的解决方案。这就是我到目前为止所拥有的。

楷模:

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)
4

2 回答 2

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)

希望能帮助到你。

于 2013-04-14T02:29:18.983 回答
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)
于 2013-04-30T09:41:10.003 回答