【发布时间】:2014-09-06 02:27:58
【问题描述】:
如何使用 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
如果 rarity 不是 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
我不确定这是否是正确的术语,但我们将不胜感激。
【问题讨论】:
-
我不确定我是否理解您的问题,但如果您尝试使用各种关键字参数构建 SearchQuerySet,您应该将 filter 语句分配回 sqs -- 这将具有将它们链接在一起的效果:sqs = sqs.filter(content=query) ... 然后 sqs = sqs.filter(rarity=rarity) 等。