简体   繁体   English

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

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

I've got a Django model called Author , with a field called name , which isn't split up into lastname/firstname: 我有一个叫做Author的Django模型,有一个名为name的字段,它没有被分成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'. 例如,我有一个名为'Donald Knuth'的作者条目。

Now I'd like to query by name, using istartswith at the start of each word within the name field . 现在我想按名称查询, name字段中的每个单词的开头使用istartswith。

So I'd like to be able to query with ' Kn ', and get ' Donald Knuth ' back. 所以我希望能够用' Kn '查询,然后让' Donald Knuth '回来。

Something like: 就像是:

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

Is this possible in Django? Django有可能吗?

You can use iregex lookup: 您可以使用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)

This isn't very efficient, but should work. 这不是很有效,但应该有效。 On MySQL you can try taking advantage of full-text search features . 在MySQL上,您可以尝试利用全文搜索功能 On other DBs you'll need some extra tools to make an efficient full-text search (like django-haystack ). 在其他数据库上,您需要一些额外的工具来进行有效的全文搜索(如django-haystack )。

For MySQL, [[:<:]] matches the beginning of the word. 对于MySQL,[[:<:]]匹配单词的开头。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM