如何使用Django icontains查询搜索包含非ASCII字符的文本?

时间:2017-12-22 20:12:15

标签: python django

我想使用ASCII搜索关键字搜索包含非ASCII字符的文本,以便' t '匹配''。

例如,在字段Book中给出一个带有梵语标题'Aṣṭasāhasrikā-prajñāpāramitā-sūtra'的title对象,我希望以下查询返回它:< / p>

Book.objects.filter(title__icontains='prajna')

1 个答案:

答案 0 :(得分:2)

一种可能性是在ascii_title对象中创建另一个字段Book,并且(a)保存标题的副本,其中自动删除变音符号,(b)仅使用{{1}在搜索过程中,首先从搜索关键字中删除变音符号:

ascii_title

您可以从django.utils.text.slugify() implementation找到class Book(models.Model): def save(self, *args, **kwargs): self.ascii_title = remove_diacritics(self.title) super().save(*args, **kwargs) Book.objects.filter(ascii_title__icontains=remove_diacritics('prajñā')) 的灵感:

remove_diacritics()

如果您正在使用PostgreSQL,还有另一种可能性 - 使用import unicodedata def remove_diacritics(value): return unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') 解释here

UNACCENT
相关问题