1

嘿伙计们,我正在编写一个记录食谱的简单应用程序。

我正在研究我的模型并偶然发现了一个问题

我的菜模型需要有很多成分。这没问题,因为我会做这样的事情

ingredients = models.ManyToManyfield(Ingredient)

没问题,我的菜现在可以有很多配料了。

然而,问题是成分需要以不同的数量出现。

即4个鸡蛋,7汤匙糖

我的成分模型目前非常简单

class Ingredient(models.Model):
    name = models.TextField(blank=False)
    slug = models.SlugField(blank=True)

我将如何解决这个问题?我需要添加哪些字段,我是否需要在我的 ManyToManyfield 上使用“通过”属性来解决这个问题?

4

1 回答 1

2

我认为您通过“通过”表得到了正确的答案(http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany

模型

class Recipe(models.Model):
    name = models.TextField(blank=False)
    ingredients = models.ManyToManyField(Ingredient, through='Components')

class Ingredient(models.Model):
    name = models.TextField(blank=False)
    slug = models.SlugField(blank=True)

class Components(models.Model):
    recipe = models.ForeignKey(Recipe)
    ingredient = models.ForeignKey(Ingredient)
    quantity = models.DecimalField()

您可以将数量单位(克、公斤、汤匙等)放在成分级别,但我认为在成分级别上会更好(例如,您可以有 1 个配方含 10 Cl 牛奶,而另一种配方含 1L ... 所以相同成分的“不同”单位。

数据创建

你说的菜是菜谱吧?如果您查看上一个链接(http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany),他们会给您一个很好的例子(基于披头士乐队)。基本上 :

1.创建食谱:

cake=Recipe.objects.create(name="Simple Cake")

2.创建几个成分(如果它们在以前的配方中不存在;)):

egg = Ingredient.objects.create(name="Egg")
milk = Ingredient.objects.create(name="milk")

3.建立关系:

cake_ing1 = Components.objects.create(recipe=cake, ingredient=egg,quantity = 2)  
cake_ing2 = Components.objects.create(recipe=cake, ingredient=milk,quantity = 200)

等等。另外,我现在很确定该单位应该进入组件级别,默认单位为“piece”(这将是您的鸡蛋......),并且类似于牛奶的“mL”。

数据访问

为了获得配方的成分(组件),只需执行以下操作:

cake = Recipe.objects.get(name = "Simple Cake")
components_cake = Components.objects.get(recipe = cake)
于 2010-06-07T11:50:15.090 回答