2015-10-10 64 views
0

我想获得食谱基于杂货查询集的查询集。 在我的models.py我有一个杂货店模型如何根据相关模型过滤查询集?

class Grocery(models.Model): 
    title = models.CharField(max_length=100) 
    picture = models.ImageField(upload_to='pictures/groceries', blank=True) 
    category = models.ForeignKey(Category, unique=False) 

我有一个配方模型:

class Recipe(models.Model): 
    title = models.CharField(max_length=100) 
    chef = models.ForeignKey(settings.AUTH_USER_MODEL, unique=False, related_name='chefs_recipe') 
    text = models.TextField() 
    picture = models.ImageField(upload_to='pictures/recipes/title-photos', blank=True) 

我有一个成分模型,它基本上是一个多对多的结表

class Ingredient(models.Model): 
    recipe = models.ForeignKey(Recipe, unique=False, related_name='recipeingredients') 
    grocery = models.ForeignKey(Grocery, unique=False) 
    quantity = models.DecimalField(max_digits=10, decimal_places=2) 
    PRIORITY = (
     ('high', 'inevitable'), 
     ('average', 'replaceble'), 
     ('low', 'flavoring') 
    ) 
    priority = models.CharField(max_length=20, choices=PRIORITY) 

我有一个由用户选择杂货的查询集。

我怎样才能得到可以用用户杂货烹饪食谱的查询集?这意味着我希望所有配方中的高优先级成分都包含在groceris queryset中。

def get_queryset(self): 
    groceries = Grocery.objets.filter(some_filter) 
    recipes = ? 

我能想到的是一个循环,我将通过配方检查食谱,但它似乎主要是效率不高时,配方表将包含大量的数据。

有什么想法吗?

回答

1

我觉得这个解决您的问题:

def get_queryset(self): 
    groceries = Grocery.objets.filter(some_filter) 
    recipes = Recipe.objects.filter(pk__in=Ingredient.objects.filter(priority='high',grocery__in=groceries).values_list('recipe_id', flat=True).distinct()) 
+0

我appologize我自己清楚,我编辑我的问题。我不需要一个包含所有用户杂货的配方,我需要在食品杂货查询集中包含所属材料的收件人。如果我有一个没有所有成分的食谱,它应该在食谱queryset中 –