如何在Django模型中进行“预设”

时间:2013-07-24 03:16:21

标签: django

我创建了一个产品商店。

class Product(models.Model):
    name = models.CharField(verbose_name=_(u'name'), max_length=200)
    quantity = models.IntegerField(verbose_name=_(u'quantity'))

>>> Product.objects.create(name="egg", quantity="100")
>>> Product.objects.create(name="ham", quantity="10")

现在我想制作食谱,例如:来自3个鸡蛋和一块火腿的炒鸡蛋。 我试图描述类似的东西:

class Recipe(models.Model):
    name = models.CharField(verbose_name=_(u'name'), max_length=200)
    items = models.ManyToManyField('Product', related_name='recipe_sets')

但在描述中坚持一个recipe所需产品的数量。

我应该将quantity放在其他模型中吗?如何计算份数(取决于产品数量)?是否有优雅的方式或应用程序来扣除产品(由于烹饪一道菜)?

1 个答案:

答案 0 :(得分:1)

你需要另一张桌子。 ManyToMany将创建一个链接您拥有的两个模型的中间表。但是,如果您更明确地创建该表的方式,则可以在链接表中添加字段。

请参阅文档extra fields on many to many relationships。基本上,你有另一种模式:

class Ingredients(models.Model):
    product = models.ForeignKey(Product)
    recipe = models.ForeignKey(Recipe)
    quantity = models.SomeField(..)

然后更改Recipe的{​​{1}}定义:

ManyToManyField