如何使用haystack SearchQuerySet()
过滤多个get参数?
例如,我有以下内容:
def get_queryset(self, *args, **kwargs):
request = self.request
query = request.GET.get('q')
rarity = request.GET.get('rarity')
quality = request.GET.get('quality')
type = request.GET.get('type')
hero = request.GET.get('hero')
sqs = SearchQuerySet().all()
if query is not None:
sqs = SearchQuerySet().filter(content=query)
return sqs
如果稀有度不是None,或者任何不等于None的参数组合,我将如何复合sqs结果?我可以使用一堆If语句,但这似乎不是最好的方法。
我尝试了以下但是它不起作用,有更好的方法吗?
def get_queryset(self, *args, **kwargs):
request = self.request
query = request.GET.get('q')
rarity = request.GET.get('rarity')
quality = request.GET.get('quality')
type = request.GET.get('type')
hero = request.GET.get('hero')
sqs = SearchQuerySet().all()
if query is not None:
sqs.filter(content=query)
if rarity is not None:
sqs.filter(rarity=rarity)
return sqs
我不确定这是否是正确的术语,但我们将不胜感激。
答案 0 :(得分:0)
请注意,filter
方法不会修改sqs。它只返回一个包含过滤器的新SearchQuerySet。如果你没有将它分配给一个变量,那么表达式sqs.filter(content=query)
就不会做任何事情。
我想你是在尝试这样做:
...
if query is not None:
sqs = sqs.filter(content=query)
if rarity is not None:
sqs = sqs.filter(rarity=rarity)
...
或许这个:
...
if query is not None:
sqs = sqs.filter_or(content=query)
if rarity is not None:
sqs = sqs.filter_or(rarity=rarity)
...
(默认情况下,过滤器的行为类似于filter_and,但可以更改)