[英]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.