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

时间:2017-02-21 23:07:31

标签: python django django-templates django-views

我遇到了Q对象查找的问题,而当用户搜索多个术语时,除非所有术语都在同一个对象中,否则搜索不会返回任何内容。

如果您转到https://www.soledadmemorial.com/plaques并搜索David S Hackley,则搜索不会返回任何内容,但如果您只搜索David S,则会获得结果。

我尝试将过滤器组合为(Q(first_name__icontains=query), Q(last_name__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()
...

1 个答案:

答案 0 :(得分:2)

icontains被转换为数据库

ILIKE '%query_text%'

当您搜索David S时,它会将其视为first_name。

你没有

ILIKE '%David S Hackley%' 

作为数据库中的任何列,因此icontains不会在这里执行。

您应该考虑使用SearchVector(postgres)甚至haystack