我认为您通过“通过”表得到了正确的答案(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)