Джанго: поиск по первым буквам отдельных слов в фразе? - PullRequest
3 голосов
/ 08 декабря 2010

У меня есть модель Django с именем Author, с полем с именем name, которое не разделено на фамилию / имя:

class Author(models.Model):
    name = models.CharField(max_length=200, unique=True)

Например, у меня есть запись Автора с именем 'Дональд Кнут'.

Теперь я хотел бы сделать запрос по имени, используя istartswith в начале каждого слова в поле name .

Так что я бы хотел иметь возможность запросить 'Kn' и получить обратно 'Donald Knuth'.

Что-то вроде:

authors = Author.objects.filter(name__word__istartswith="Kn")

Возможно ли это в Джанго?

Ответы [ 2 ]

1 голос
/ 08 декабря 2010

Вы можете использовать iregex lookup:

import re

text = "Kn"
text = re.escape(text) # make sure there are not regex specials
authors = Author.objects.filter(name__iregex=r"(^|\s)%s" % text)

Это не очень эффективно, но должно работать.На MySQL вы можете попробовать воспользоваться функциями полнотекстового поиска .На других БД вам понадобятся дополнительные инструменты для эффективного полнотекстового поиска (например, django-haystack ).

0 голосов
/ 30 сентября 2016

Для MySQL [[: <:]] соответствует началу слова. </p>

searchStr = "Kn"
authors = Author.objects.filter(name__iregex=r"[[:<:]]{0}".format(searchStr))
...