4

私は2つのモデルを持っていRecipeますIngredient. Recipe モデルは Ingredients と多対多の関係にありますが、材料の量も指定できるようにする必要があります。私のモデルは現在次のようになっています。

class Ingredient(models.Model):
    name = models.CharField(max_length="256", db_index=True, null=True)

class Recipe(models.Model):
    ...
    ingredients = models.ManyToManyField(Ingredient, related_name="RecipeIngredients", db_index=True)

しかし、明らかに各レシピでは、各成分の量が異なります。したがって、次のようなことができる必要があります。

cakeRecipe = Recipe.objects.get(pk=1)
flour = Ingredient.objects.get(pk=2)
cakeRecipe.ingredients.add(flour, '200 grams')

しかし、方法がわかりません。どんな助けでも大歓迎です。ありがとう :)

4

2 に答える 2

3

多対多関係の追加フィールドの指示に従う必要があります。

class RecipeIngredient(models.Model):
    recipe = models.ForeignKey('Recipe')
    ingredient = models.ForeignKey('Ingredient')
    quantity = models.CharField(max_length=200)

class Recipe(models.Model):
    ingredients = models.ManyToManyField(Ingredient, through=RecipeIngredient)
于 2013-10-09T18:13:45.963 に答える
2

中間モデルが必要です。'through' 引数を使用して、2 つをリンクするモデルのように。そのようです:

class Ingredient(models.Model):
    name = models.CharField(max_length="256", db_index=True, null=True)

class Recipe(models.Model):
    ...
    ingredients = models.ManyToManyField(Ingredient, 
                                         related_name="RecipeIngredients", 
                                         db_index=True,
                                         through='Quantity')


class Quantity(models.Model):
    ingrediant = models.ForeignKey(Ingredient)
    recipe = models.ForeignKey(Recipe)
    amount = models.IntegerField()
    #... any other fields ...

詳しくはこちらをご覧ください。

于 2013-10-09T18:13:39.123 に答える