有没有一种方法可以在Django查询中按x中的任何一个进行过滤

时间:2020-03-17 13:30:16

标签: python django list django-queryset

在我的webwapp中,我希望用户能够通过从sidebar中选择类别来过滤搜索结果。

视图中的数据GET请求检索选定选项的列表并进行解析。然后,将要过滤的数据分成多个列表,如views.py中的Index中的以下片段所示:

class Index(View):
    def get(request):
        ... some checks to ensure its a valid request...
        if valid:
            dietTypeList = request.GET.getlist('diettype[]') #['meat','vegetarian',...] 
            categoryList = request.GET.getlist('categories[]') #['Italian','Western',...]
            ....
            return render(request,'results.html',context_dict)
        ....

然后我想在.filter()过滤器函数中过滤结果,以便我的结果是所选的任何类别,并将任何饮食类型应用于这些类别。

我调查了Q查询,但是我不确定在任何情况下如何执行以下操作 如何有效地执行以下操作:

results = Recipe.objects.filter(Q(name__contains=searchCriteria) & Q(category=any of categoryTypeList ))

1 个答案:

答案 0 :(得分:2)

创建过滤器以查看类别是否为一组类别的成员的一种简单方法是使用double-underscore name__in表单进行字段查找,如

results = Recipe.objects.filter(category__in=some_set_of_categories)