我正在使用过滤器icontains搜索单词,但我只想让它匹配整个单词。例如如果我搜索肝脏,我不希望它返回分娩。
我的查询看起来像这样
MyModel.objects.filter(title__icontains=search_word)
我已经看过过滤器__search
,但这并没有带回3个字符或更少字符的结果,而我正在构建的网站包含很多可以搜索的结果,例如'BBC'
我无法访问数据库,但如果有人知道如何在代码中禁用它,那么我很乐意转而使用它作为替代方案。
答案 0 :(得分:6)
Regexp通常就足够了: 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
答案 1 :(得分:0)
如果您使用angularjs或DRF实施了tastypie和REST服务,则可以按整个单词过滤为$http.get(uri, {'params': {'display_name__iregex': '[[:<:]]word[[:>:]]'})
当然,应该启用display_name
来过滤Tastypie资源的Meta类filtering = {'display_name': ALL,}
答案 2 :(得分:-3)
听起来你想要一个不区分大小写的完全匹配。
MyModel.objects.filter(title__iexact=search_word)
http://docs.djangoproject.com/en/dev/ref/models/querysets/#lookup-iexact