Django:搜索短语中各个单词的首字母?

发布于 2024-10-07 00:47:19 字数 509 浏览 4 评论 0原文

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

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

例如,我有一个作者条目,其中包含命名为“唐纳德·高德纳”。

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

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

比如:

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

这在 Django 中可能吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蛮可爱 2024-10-14 00:47:19

您可以使用 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)。

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

淡淡的优雅 2024-10-14 00:47:19

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

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

For MySQL, [[:<:]] matches the beginning of the word.

searchStr = "Kn"
authors = Author.objects.filter(name__iregex=r"[[:<:]]{0}".format(searchStr))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文