2017-02-21 34 views
0

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

我不明白你的意思是如何从多个对象 –

+0

什么是Django的实际产生的查询结合搜索和你能指望什么呢? – spectras

回答

2

icontains被当你正在寻找戴维家发现它FIRST_NAME翻译成数据库

ILIKE '%query_text%' 

你是不是有

ILIKE '%David S Hackley%' 

任何你列的数据库中,以便icontains不会做在这里。

您应该考虑使用SearchVector(Postgres的),甚至haystack

+0

谢谢。我投了票,因为你解释了发生的事情,而不是提供一个链接到另一种方法。 –

+0

为小修补程序编辑,因为它是使用ILIKE的图标 – iklinac

相关问题