开发者

Django: search on first letters of individual words within phrase?

开发者 https://www.devze.com 2023-01-29 07:10 出处:网络
I\'ve got a Django model called Author, with a field called name, which isn\'t split up into lastname/firstname:

I've got a Django model called Author, with a field called name, which isn't split up into lastname/firstname:

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

For example, I have an Author entry with name 'Donald Knuth'.

Now I'd like to query by name, using istartswith at the sta开发者_运维问答rt of each word within the name field.

So I'd like to be able to query with 'Kn', and get 'Donald Knuth' back.

Something like:

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

Is this possible in Django?


You can use 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)

This isn't very efficient, but should work. On MySQL you can try taking advantage of full-text search features. On other DBs you'll need some extra tools to make an efficient full-text search (like django-haystack).


For MySQL, [[:<:]] matches the beginning of the word.

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号