gpt4 book ai didi

python - 多对多字段问题

转载 作者:行者123 更新时间:2023-12-01 06:16:41 25 4
gpt4 key购买 nike

大家好,我正在编写一个简单的应用程序来记录食谱。

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

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

ingredients = models.ManyToManyfield(Ingredient)

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

但是,问题是成分需要不同的数量。

即4个鸡蛋,7汤匙糖

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

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

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

最佳答案

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

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

数据访问

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

cake = Recipe.objects.get(name = "Simple Cake")
components_cake = Components.objects.get(recipe = cake)

关于python - 多对多字段问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2988471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com