Hay伙计们,我正在写一个记录食谱的简单应用程序。
我正在研究我的模型,偶然发现了一个问题
我的碟子模型需要有很多成分。这没问题,因为我会做这样的事情
ingredients = models.ManyToManyfield(Ingredient)
没问题,我的菜现在可以有许多成分。
然而,问题是该成分需要有不同的数量。
我的成分模型目前非常简单
class Ingredient(models.Model):
name = models.TextField(blank=False)
slug = models.SlugField(blank=True)
我将如何解决这个问题?我需要添加哪些字段,是否需要在ManyToManyfield上使用'through'属性来解决此问题?
答案 0 :(得分: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克牛奶,另一个配1L。 ..所以相同成分的“不同”单位。
数据创建
By Dish你的意思是Recipe对吗?如果您查看上一个链接(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)
等等。另外,我现在非常确定单位应该进入组件级别,默认单位为“片段”(对于你的鸡蛋......),对于牛奶来说就像“mL”。
数据访问
为了获得配方的成分(成分),请执行以下操作:
cake = Recipe.objects.get(name = "Simple Cake")
components_cake = Components.objects.get(recipe = cake)