2013-11-15 83 views
1

所以我一直在嘗試實現搜索功能,用戶可以輸入關鍵字並查找用戶。搜索方法應該查找用戶字段內的確切單詞匹配,例如名字,姓氏,工作等Django過濾器 - iregex只匹配完整的單詞

我已經嘗試過icontains,但它也匹配單詞內,例如,如果用戶輸入'a'搜索將返回包含'a'的任何內容。 (這是我原本在做決定解決問題之前做的事情)

我試過iexact但顯然會給出完全匹配,如果用戶輸入'john',它會跳過名字爲'john doe'什麼的。

所以經過相當多的谷歌搜索我發現兩個計算器線程

django filter icontains match whole words only

Whole-word match only in Django query

由於我使用PostgreSQL我切換到使用\Ÿ代替\灣現在我正在使用的查詢是

results = User.objects.filter(first_name__iregex=r"\y{0}\y".format(first)) 

我也試過了,其他方法列在我提到的兩個線程中。

results = User.objects.filter(first_name__iregex=r"\y%s\y"%first) 

問題是它不會返回任何東西。在調試過程中,我已經離開並檢查了正在生成的查詢,據我所知它似乎是正確的。

WHERE `LinkedApp_user`.`first_name` REGEXP \yahsan\y 

我的數據庫目前大約有5用戶提供具有其中的一個名字「阿赫桑」而另一位有名字「阿赫桑·薩利姆」。但是這個查詢什麼都沒有返我真的很感激任何幫助。

編輯:我試圖切換到SQLite並更改\ y與\ b和搜索似乎已開始工作。但是我無法使用sqlite,如果有人能指導我,我會非常感激。

另一編輯:我已經通過切換db解決了我的問題與postgresql。無論如何,這是一個愚蠢的錯誤。問題是你如何使這項工作與mysql,我所嘗試過的所有失敗。

+0

'「由於我使用PostgreSQL我切換到使用/ Y而不是/ b。「' - 你*用'\ b'試過*看看它是否真的不起作用? – yuvi

+0

抱歉,錯字,因爲我說它不工作。 –

+0

是\ b與Sqlite一起工作,我也對它進行了測試。你有沒有嘗試運行沒有Django的查詢,看看它是否工作?也許postgresql是區分大小寫的,你是否嘗試過搜索'Ahsan'? – yuvi

回答