过滤外键django

时间:2020-05-21 07:39:20

标签: django django-models filter django-queryset

我有两个模型:

class Recipe(models.Model):
   title = models.CharField()
   ....
class Ingredient(models.Model):
   recipe = models.Foreignkey(Recipe, related_name='recipe_ingredients')
   name = models.CharField()
   ...

所以我要做的是按给定的成分过滤出食谱,我设法做到了: view.py

class SearchResultListViewIngredient(ListView):
   model = Recipe
   paginate_by = 25
   template_name = 'recipes/search_ingredient.html'

   def get_queryset(self):
       """
       Filter out recipes by given ingredient
       """

       ingredient = self.request.GET.get('ingredient')
       object_list = []
       if ingredient:
          i = Ingredient.objects.filter(name__icontains=ingredient)
          object_list = [r.recipe for r in i]

       return object_list

此问题是,如果重复的对象是多个具有相同名称的成分,则它将返回重复的对象。 因此,例如,以鸡蛋和茄子为成分的食谱。过滤后,该对象将出现两次。有没有更好的方法来做这个过滤器?

谢谢。

编辑: 我知道我可以将object_list包装在set()中,但这感觉不对。

1 个答案:

答案 0 :(得分:0)

您可以使用distinct()来获取不同的对象。

recipes = Recipe.objects.filter(recipe_ingredients__name__icontains=ingredient).distinct()