Python 将Django Q对象查找合并到一个过滤器中

Python 将Django Q对象查找合并到一个过滤器中,python,django,django-templates,django-views,Python,Django,Django Templates,Django Views,我在Q对象查找方面有一个问题,而当用户搜索多个术语时,除非所有术语都在同一个对象中,否则搜索不会返回任何结果 如果您转到并搜索David S Hackley,搜索将不返回任何结果,但如果您只搜索David S,则会得到一个结果 我尝试过组合过滤器,如(Q(first\u name\u icontains=query)、Q(last\u name\u icontains=query)),但只得到了一个错误。下面是我当前的代码。它不需要将搜索组合成多个对象 ... if query: quer

我在Q对象查找方面有一个问题,而当用户搜索多个术语时,除非所有术语都在同一个对象中,否则搜索不会返回任何结果

如果您转到并搜索
David S Hackley
,搜索将不返回任何结果,但如果您只搜索
David S
,则会得到一个结果

我尝试过组合过滤器,如
(Q(first\u name\u icontains=query)、Q(last\u name\u icontains=query))
,但只得到了一个错误。下面是我当前的代码。它不需要将搜索组合成多个对象

...
if query:
   queryset_list = queryset_list.filter(
     Q(first_name__icontains=query) |
     Q(last_name__icontains=query) |
     Q(branch__icontains=query) |
     Q(rank__icontains=query) |
     Q(group__group_name__icontains=query) |
     Q(veteran__name__icontains=query)
).distinct()
...
将转换为数据库

ILIKE '%query_text%'
当您搜索David S时,它会将其作为名字查找

你没有

ILIKE '%David S Hackley%' 
因为数据库中的任何列,所以icontains不会在这里执行此操作

您应该考虑使用(PASGRESs)或甚至

< P>将数据库翻译成

ILIKE '%query_text%'
当您搜索David S时,它会将其作为名字查找

你没有

ILIKE '%David S Hackley%' 
因为数据库中的任何列,所以icontains不会在这里执行此操作


你应该考虑使用(PASGRESs)或甚至

我不知道你的意思是组合从多个对象中搜索Django实际生成的查询,你期望什么?我不明白你的意思是从多个对象中组合搜索什么是Django实际生成的查询,你有什么期待?谢谢。我投了赞成票,因为你解释了发生了什么,而不是仅仅提供了一个指向另一个方法的链接。编辑为小补丁,因为它是icontains,它使用ILIKEThank你。我投了赞成票,因为你解释了发生了什么,而不是仅仅提供了一个指向另一个方法的链接