Python 如何使用Django icontains查询搜索包含非ASCII字符的文本?
我想使用ASCII搜索关键字搜索包含非ASCII字符的文本,以便“t”匹配ṭ'. 例如,给定一个梵文标题为“a”的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字段,首
书籍
对象ṣṭ作为字段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ñā'))