django filter icontains match whole words only
I am using the filter icontains to search for words but I only want it to match whole words. eg if I searched for liver I wouldn't want it returning delivery.
my query looks like this
MyModel.objects.filter(title__icontains=search_word)
I have seen the filter __search
but this does not bring back results with 3 characters or less and the site I am building contains a lot of these which could be searched for, eg 'bbc'
I do not have access to the db but if anyone knows how I can disable this in the code then I would be happy to switch to using this as an alternative.
Regexp are usually enough : http://docs.djangoproject.com/en/dev/ref/models/querysets/#regex
Please note that the regular expression syntax is that of the database backend in use .
In python (sqlite) the regexp would be :
b(word)b
In Mysql you have :
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -> 0
In case you have angularjs and REST service implemented with tastypie or DRF, you can filter by whole words as $http.get(uri, {'params': {'display_name__iregex': '[[:<:]]word[[:>:]]'})
of course, display_name
should be enabled to filtering in Tastypie resource's Meta class as filtering = {'display_name': ALL,}
It sounds like you want a Case-insensitive exact match.
MyModel.objects.filter(title__iexact=search_word)
http://docs.djangoproject.com/en/dev/ref/models/querysets/#lookup-iexact
链接地址: http://www.djcxy.com/p/1008.html上一篇: 黄瓜,水豚和硒随机工作
下一篇: django过滤器图标只能匹配整个单词