2017-02-21 89 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

相關問題