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))
精彩评论