嘿,伙计们,我正在写一个简单的应用程序来记录食谱。
我正在设计我的模型,偶然发现了一个问题
我的Dish模型需要有很多配料。这没问题,因为我会这样做
ingredients = models.ManyToManyfield(Ingredient)没问题,我的菜现在可以有很多不同的渐变。
然而,问题是配料需要不同的数量。
即4个鸡蛋,7汤匙糖
目前我的配料模型非常简单
class Ingredient(models.Model):
name = models.TextField(blank=False)
slug = models.SlugField(blank=True)我该如何解决这道题呢?我需要添加哪些字段,需要在我的ManyToManyfield上使用'through‘属性来解决这个问题吗?
发布于 2010-06-07 19:50:15
我认为你用一个“直通”表( 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()你可以把数量的单位(克,公斤,汤匙等)放在配料水平上,但我认为在配料水平上更好(例如,你可以有一个配方有10升牛奶,但另一个配方有1升牛奶……所以同一种配料的“不同”单位。
数据创建
你说的Dish是指菜谱,对吧?如果你看了之前的链接(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)https://stackoverflow.com/questions/2988471
复制相似问题