1

やあみんな、私はレシピを記録する簡単なアプリを書いています。

モデルを作成していて、問題に遭遇しました

私の料理モデルには多くの材料が必要です。私はこのようなことをするので、これは問題ありません

ingredients = models.ManyToManyfield(Ingredient)

問題ありません、私の料理は今多くの成分を持つことができます。

ただし、問題は、成分が異なる量で来る必要があるということです。

IE 4卵、大さじ7砂糖

私の成分モデルは現時点では非常に単純です

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

この問題を解決するにはどうすればよいですか?この問題を解決するには、ManyToManyfieldで「through」属性を使用する必要があるフィールドを追加する必要がありますか?

4

1 に答える 1

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 Clのミルクを入れ、もう1つに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)
于 2010-06-07T11:50:15.090 に答える