2016-05-23 66 views
1

請,麻煩幫忙:Django的 - 過濾器(__icontains)不起作用

class SearchResultView(TemplateView): 
    template_name = "search_result.html" 

    def get_context_data(self, **kwargs): 
     context = super(SearchResultView, self).get_context_data(**kwargs) 
     location = self.request.GET['location'] 
     locations_searched = Location.objects.filter(name__icontains=location) 
     context['locations_searched'] = locations_searched 
     return context 

class AdvancedSearchForm(forms.Form): 
    location = forms.CharField(label=u"Локация:") 

當位置字段中輸入大寫的話,我可以看到導致的觀點,而不是資本的時候 - 沒有在顯示查看

謝謝!

+1

您是否正在使用SQlite數據庫? – solarissmoke

回答

2

我猜你正在使用SQLite數據庫,並在輸入中有一些非ASCII字符。來自SQLite FAQs

Unicode字符不區分大小寫的匹配不起作用。 SQLite的默認配置只支持不區分大小寫的ASCII字符比較。原因在於,要進行完整的Unicode區分大小寫比較和大小寫轉換,需要表和邏輯,這些大小几乎是SQLite庫的兩倍。

Django的documentation也提到了這一點:

對於所有SQLite的版本,有試圖匹配一些類型的字符串時,微微有些反直覺 行爲。這些是 當在查詢集中使用iexact或包含過濾器時觸發的...

+0

非常感謝!它變成了我必須自己意識到這一點?可能會通過大寫/小寫轉換?或者可能是我應該改變DB :) – Dennis

+0

你會在生產中使用SQlite(不推薦!)嗎?如果沒有,那麼一旦切換到像Postgres或MySQL這樣的生產數據庫,問題就會消失。否則,是的,您可能必須在將輸入傳遞給過濾器之前手動將輸入小寫。 – solarissmoke