首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >manyToManyField问题

manyToManyField问题
EN

Stack Overflow用户
提问于 2010-06-07 17:49:32
回答 1查看 388关注 0票数 1

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

我正在设计我的模型,偶然发现了一个问题

我的Dish模型需要有很多配料。这没问题,因为我会这样做

代码语言:javascript
复制
ingredients = models.ManyToManyfield(Ingredient)

没问题,我的菜现在可以有很多不同的渐变。

然而,问题是配料需要不同的数量。

即4个鸡蛋,7汤匙糖

目前我的配料模型非常简单

代码语言:javascript
复制
class Ingredient(models.Model):
    name = models.TextField(blank=False)
    slug = models.SlugField(blank=True)

我该如何解决这道题呢?我需要添加哪些字段,需要在我的ManyToManyfield上使用'through‘属性来解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-07 19:50:15

我认为你用一个“直通”表( http://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany )得到了正确的答案。

模型

代码语言:javascript
复制
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.创建一个食谱:

代码语言:javascript
复制
cake=Recipe.objects.create(name="Simple Cake")

2.创建几种配料(如果它们还不存在于之前的食谱中;):

代码语言:javascript
复制
egg = Ingredient.objects.create(name="Egg")
milk = Ingredient.objects.create(name="milk")

3.创建关系:

代码语言:javascript
复制
cake_ing1 = Components.objects.create(recipe=cake, ingredient=egg,quantity = 2)  
cake_ing2 = Components.objects.create(recipe=cake, ingredient=milk,quantity = 200)

诸若此类。另外,我现在非常确定该单元应该转到组件级别,默认单元为“块”(这将用于您的鸡蛋...),并且将类似于牛奶的"mL“。

数据访问

要获取食谱的成分(组件),只需执行以下操作:

代码语言:javascript
复制
cake = Recipe.objects.get(name = "Simple Cake")
components_cake = Components.objects.get(recipe = cake)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2988471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档