Django与另一个领域的多对多关系

时间:2013-10-09 18:08:07

标签: django django-models

我有两个模型,RecipeIngredient。食谱模型与成分有许多关系,但我还需要能够指定成分的数量。我的模特目前看起来像:

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 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

相关问题