我有以下两个查询集:
q = Q(is_visible='true')
q |= Q(user='some_user')
q &= Q(text=request.GET.get('query', ''))
sqs1 = SearchQuerySet().filter(q)
sqs2 = SearchQuerySet().models(model.Some).filter(text=request.GET.get('query', ''))
如果我只将这两个查询集合在一起,我就得不到我想要的东西了。由于元素将针对其特定查询进行评分。我想要的是以某种方式将这两个查询组合在一起传递给SearchQuerySet之前,以便搜索后端计算整个集合的得分。
我想到了以某种方式将第二个查询放入第一个查询的Q链中,但我无法弄清楚如何根据模型进行搜索。
答案 0 :(得分:3)
所以我通过使用以下查询解决了这个问题:
request_text = request.GET.get('query', '')
user = request.user
sqs = SearchQuerySet().filter(text=request_text).exclude(~Q(user='some_user') | Q(is_visible='false')
看起来,可以使用过滤器和排除来重新解释问题。