django过滤器图标只能匹配整个单词
我正在使用过滤器图标来搜索单词,但我只希望它匹配整个单词。 例如,如果我搜索肝脏,我不希望它返回交付。
我的查询看起来像这样
MyModel.objects.filter(title__icontains=search_word)
我已经看到过滤器__search
但这不会带回3个字符或更少的结果,我正在构建的网站包含很多可以搜索的这些内容,例如'bbc'
我没有访问数据库,但如果有人知道我可以在代码中禁用此功能,那么我会很乐意切换到使用此作为替代。
正则表达式通常就足够了:http://docs.djangoproject.com/en/dev/ref/models/querysets/#regex
请注意,正则表达式语法是正在使用的数据库后端的语法。
在python(sqlite)中,正则表达式是:
b(word)b
在Mysql中你有:
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0
如果你使用tastypie或DRF实现了angularjs和REST服务,你可以将整个单词过滤为$http.get(uri, {'params': {'display_name__iregex': '[[:<:]]word[[:>:]]'})
当然,应该启用display_name
以在Tastypie资源的Meta类中filtering = {'display_name': ALL,}
为filtering = {'display_name': ALL,}
这听起来像是你想要一个不区分大小写的精确匹配。
MyModel.objects.filter(title__iexact=search_word)
http://docs.djangoproject.com/en/dev/ref/models/querysets/#lookup-iexact
链接地址: http://www.djcxy.com/p/1007.html上一篇: django filter icontains match whole words only
下一篇: Is it possible to make Python etags a bit smarter with emacs?