Фильтр иконок Django соответствует только целым словам - PullRequest
7 голосов
/ 02 июня 2010

Я использую icontain фильтра для поиска слов, но я хочу, чтобы он совпадал только с целыми словами. например если бы я искал печень, я бы не хотел, чтобы она возвращала доставку.

мой запрос выглядит так

MyModel.objects.filter(title__icontains=search_word)

Я видел фильтр __search, но он не возвращает результаты с 3 или менее символами, и сайт, который я создаю, содержит много таких, которые можно искать, например, 'Би-би'

У меня нет доступа к БД, но если кто-нибудь знает, как я могу отключить это в коде, я был бы рад перейти на использование этого в качестве альтернативы.

Ответы [ 3 ]

6 голосов
/ 26 октября 2010

регулярных выражений обычно достаточно: 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
0 голосов
/ 05 марта 2016

Если у вас есть и сервис REST, реализованный с или DRF, вы можете фильтровать по целым словам как $http.get(uri, {'params': {'display_name__iregex': '[[:<:]]word[[:>:]]'})

конечно, display_name должен быть включен для фильтрации в метаклассе ресурса Tastypie как filtering = {'display_name': ALL,}

0 голосов
/ 02 июня 2010

Похоже, вы хотите точное совпадение без учета регистра.

MyModel.objects.filter(title__iexact=search_word)

http://docs.djangoproject.com/en/dev/ref/models/querysets/#lookup-iexact

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...