「スルー」テーブル( 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)