Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 曼尼菲尔德问题_Python_Django_Manytomanyfield - Fatal编程技术网

Python 曼尼菲尔德问题

Python 曼尼菲尔德问题,python,django,manytomanyfield,Python,Django,Manytomanyfield,嘿,伙计们,我正在写一个简单的应用程序来记录食谱 我在做我的模型,偶然发现了一个问题 我的菜肴模型需要有很多配料。这没问题,因为我会这样做 ingredients = models.ManyToManyfield(Ingredient) 没问题,我的菜现在可以有很多味道了 然而,问题是配料的数量需要不同 即4个鸡蛋,7汤匙糖 目前我的配料模型非常简单 class Ingredient(models.Model): name = models.TextField(blank=False)

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

我在做我的模型,偶然发现了一个问题

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

ingredients = models.ManyToManyfield(Ingredient)
没问题,我的菜现在可以有很多味道了

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

即4个鸡蛋,7汤匙糖

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

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

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

我认为您使用“through”表()

型号

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升……因此,同一配料的“不同”单位

数据创建

你说的菜是指食谱,对吗?如果你看一下前面的链接(),他们会给你一个很好的例子(基于甲壳虫乐队)。 基本上:

1.创建配方:

cake=Recipe.objects.create(name="Simple Cake")
2.创建几种成分(如果它们在以前的配方中不存在;):

3.建立关系:

cake_ing1 = Components.objects.create(recipe=cake, ingredient=egg,quantity = 2)  
cake_ing2 = Components.objects.create(recipe=cake, ingredient=milk,quantity = 200)
等等。另外,我现在非常确定这个单位应该是组件级的,默认单位是“件”(这将用于鸡蛋…),类似于牛奶的“毫升”

数据访问

要获得配方的成分(成分),只需执行以下操作:

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

阅读,我认为它与您想要的非常相似。在创建初始菜肴对象后,我如何添加另一种配料?我的配料模型称为组件,看起来与该模型几乎相同。我想创建一个Dish Obj,然后添加许多Ingrentients。通常我会做Dish.配料。添加(配料Obj),但我需要这些额外的字段。我会创建一个组件对象,然后做Dish.components.add(组件对象)?我只是在我以前的帖子中添加了更多的信息(因为没有足够的评论空间!)好的,那很好,我现在可以在一道菜(食谱)中添加更多的成分了。现在当我做这道菜的时候。配料。全部()。无法访问组件属性。所以我不能做Dish.contracents.all()[0].quantity,因为它只返回一个配料对象,而不是一个成分对象。对上面的问题有什么想法吗?
cake = Recipe.objects.get(name = "Simple Cake")
components_cake = Components.objects.get(recipe = cake)