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

Python 如何使用Django icontains查询搜索包含非ASCII字符的文本?,python,django,Python,Django,我想使用ASCII搜索关键字搜索包含非ASCII字符的文本,以便“t”匹配ṭ'. 例如,给定一个梵文标题为“a”的书籍对象ṣṭ作为字段title中的āhasrikā-prajāpāramitā-sūtra',我希望以下查询返回它: Book.objects.filter(title__icontains='prajna') 一种可能是在Book对象中创建另一个字段ascii\u title,并(a)保存一份标题副本,其中自动删除变音符号,(b)在搜索期间仅使用ascii\u title字段,首

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

例如,给定一个梵文标题为“a”的
书籍
对象ṣṭ作为字段
title
中的āhasrikā-prajāpāramitā-sūtra',我希望以下查询返回它:

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

一种可能是在
Book
对象中创建另一个字段
ascii\u title
,并(a)保存一份标题副本,其中自动删除变音符号,(b)在搜索期间仅使用
ascii\u title
字段,首先从搜索关键字中删除变音符号:

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ñā'))
您可以从以下网站找到
删除发音符号()的灵感:

如果您使用的是PostgreSQL,还有另一种可能性-使用
uncent
查询,如下所述:

import unicodedata
def remove_diacritics(value):
     return unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
Book.objects.filter(title__unaccent=remove_diacritics('prajñā'))