2013-02-28 105 views
2

我有一些這樣的模型;django包含所有查詢

class Ingredient(models.Model): 
    name = models.CharField(max_length=128) 

class Recipe(models.Model): 
    name = models.CharField(max_length=128) 
    ingredients = models.ManyToManyField(Ingredient, through='RecipeIngredient') 

class RecipeIngredient(models.Model): 
    recipe = models.ForeignKey(Recipe) 
    ingredient = models.ForeignKey(Ingredient) 

我怎樣才能找到包含所有成分的食譜?

這裏是一個例子;

>>> i1 = Ingredient(name="egg") 
>>> i1.save() 
>>> i2 = Ingredient(name="flour") 
>>> i2.save() 
>>> i3 = Ingredient(name="water") 
>>> i3.save() 
>>> i4 = Ingredient(name="milk") 
>>> i4.save() 
>>> i5 = Ingredient(name="sugar") 
>>> i5.save() 
>>> i6 = Ingredient(name="carrot") 
>>> i6.save() 
>>> i7 = Ingredient(name="wheat") 
>>> i7.save() 

>>> r1 = Recipe(name="omelet") 
>>> r1.save() 
>>> r1.ingredients.add(i1, i2, i3) 
>>> r2 = Recipe(name="icecream") 
>>> r2.save() 
>>> r2.ingredients.add(i3, i4, i5) 

>>> test = Recipe.objects.filter(ingredients__in=[i1.id, i2.id, i3.id, i4.id]) 
>>> test 
[<Recipe: omelet>, <Recipe: omelet>, <Recipe: omelet>, <Recipe: icecream>, <Recipe: icecream>] 

我想找到唯一的煎蛋卷。因爲只有煎蛋卷包含蛋(I1),麪粉(3-12),水(I3)

感謝

回答

0

也許IT連鎖在一起嗎?

Recipe.objects.filter(ingredients=i1.id).filter(ingredients=i2.id).filter(ingredients=i3.id).filter(ingredients=i4.id) 
+0

>>> Recipe.objects.filter(成分= i1.id).filter(成分= i2.id).filter(成分= i3.id).filter(成分= i4.id) [ ] – ecabuk 2013-02-28 19:50:13

+0

它不會返回任何... – ecabuk 2013-02-28 20:27:36