AP257 AP257 - 1 year ago 69
Python Question

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

I've got a Django model called

, with a field called
, 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

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

Something like:

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

Is this possible in Django?

lqc lqc
Answer Source

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

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download