我遇到了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()
...
答案 0 :(得分:2)
icontains被转换为数据库
ILIKE '%query_text%'
当您搜索David S时,它会将其视为first_name。
你没有
ILIKE '%David S Hackley%'
作为数据库中的任何列,因此icontains不会在这里执行。
您应该考虑使用SearchVector(postgres)甚至haystack