我有一个名为Author
的Django模型,其中包含一个名为name
的字段,该字段未分割为姓氏/名字:
class Author(models.Model):
name = models.CharField(max_length=200, unique=True)
例如,我有一个名为'Donald Knuth'的作者条目。
现在我想按名称查询,在name
字段中的每个单词的开头使用istartswith 。
因此,我希望能够使用“Kn
”进行查询,然后返回“Donald Knuth
”。
类似的东西:
authors = Author.objects.filter(name__word__istartswith="Kn")
Django有可能吗?
答案 0 :(得分:1)
您可以使用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上,您可以尝试利用full-text search features。在其他数据库上,您需要一些额外的工具来进行有效的全文搜索(如django-haystack)。
答案 1 :(得分:0)
对于MySQL,[[:<:]]匹配单词的开头。
searchStr = "Kn"
authors = Author.objects.filter(name__iregex=r"[[:<:]]{0}".format(searchStr))