Django - 过滤器(__icontains)不起作用

时间:2016-05-23 10:59:01

标签: django

请帮助解决问题:

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 个答案:

答案 0 :(得分:4)

我猜您正在使用SQLite数据库并且在输入中有一些非ASCII字符。来自SQLite FAQs

  

Unicode字符的不区分大小写的匹配不起作用。   SQLite的默认配置仅支持ASCII字符的不区分大小写的比较。这样做的原因是进行完全Unicode不区分大小写的比较和大小写转换需要的表和逻辑几乎是SQLite库大小的两倍。

Django'} documentation也提到了这一点:

  

对于所有SQLite版本,有一些反直觉   尝试匹配某些类型的字符串时的行为。这些是   在使用iexact或在Querysets中包含过滤器时触发...