Django:如何在短语中搜索每个单词的首字母?

4 投票
2 回答
3433 浏览
提问于 2025-04-16 08:14

我有一个叫做 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

撰写回答