AP257 AP257 - 2 months ago 9
Python Question

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

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 start 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?

lqc lqc
Answer

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).

Comments