Django:如何在短语中搜索每个单词的首字母?
我有一个叫做 Author
的 Django 模型,其中有一个字段叫 name
,这个字段没有分开姓和名。
class Author(models.Model):
name = models.CharField(max_length=200, unique=True)
比如,我有一个作者的名字是 'Donald Knuth'。
现在我想根据名字来查询,使用 istartswith 方法来匹配 name
字段中每个单词的开头。
也就是说,我想输入 'Kn
',然后能找到 'Donald Knuth
'。
大概是这样的:
authors = Author.objects.filter(name__word__istartswith="Kn")
在 Django 中可以做到这一点吗?
2 个回答
0
在MySQL中,[[:<:]]表示一个单词的开头。
searchStr = "Kn"
authors = Author.objects.filter(name__iregex=r"[[:<:]]{0}".format(searchStr))
2
你可以使用 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数据库中,你可以尝试利用 全文搜索功能。而在其他数据库中,你可能需要一些额外的工具来实现高效的全文搜索,比如 django-haystack。