Django:在短语中搜索单个单词的第一个字母?

时间:2010-12-08 17:48:28

标签: python django django-queryset

我有一个名为Author的Django模型,其中包含一个名为name的字段,该字段未分割为姓氏/名字:

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

例如,我有一个名为'Donald Knuth'的作者条目。

现在我想按名称查询,在name字段中的每个单词的开头使用istartswith

因此,我希望能够使用“Kn”进行查询,然后返回“Donald Knuth”。

类似的东西:

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

Django有可能吗?

2 个答案:

答案 0 :(得分:1)

您可以使用iregex查询:

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上,您可以尝试利用full-text search features。在其他数据库上,您需要一些额外的工具来进行有效的全文搜索(如django-haystack)。

答案 1 :(得分:0)

对于MySQL,[[:<:]]匹配单词的开头。

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