2013-10-09 58 views
2

我有兩個模型,RecipeIngredient。食譜模型與成分有許多關係,但我也需要能夠指定成分的數量。我的模型目前看起來像:Django與另一個字段的多對多關係

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') 

但我不知道如何。任何幫助將不勝感激。謝謝:)

回答

2

你想要一箇中間模型。如同 - 在一些模型中,將使用'through'參數來鏈接兩者。像這樣:

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 ... 

瞭解更多關於它here

+0

完美。我會試試看,非常感謝! – amba88

3

您需要按照上Extra fields on many-to-many relationships說明:

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) 
+0

評論中的鏈接返回404。它應該是https://docs.djangoproject.com/en/1.10/topics/db/models/#extra-fields-on-many-to-many-relationships – Hexatonic

相關問題