Django queryset在CharField中不为字符“ i”返回任何内容

时间:2018-12-05 12:05:49

标签: django sqlite django-queryset django-2.0

我正在尝试编写搜索视图以通过在sqlite表的CharField中的icontains进行过滤来查找记录。但是,某些记录以“İ”开头,并且当用户使用'i'而不是'İ'提交搜索表单时,queryset不返回任何内容。

如果记录以“ i”开头,则视图运行正确。

我还使用LIKE对同​​一张表运行了SQL查询,但查询未返回任何内容。

Django 2.0 SQLite 3

编辑1: icontains不区分大小写,但是如果单词具有'i'字符,它将测试'I',但是我需要使用它来测试'İ'。同样也不会测试您是否为“ I”输入“ı”。

我改变了看法,并为'i'-'İ'添加了此代码,并且可以正常工作。但是,必须有解决此问题的另一种方法,而不是替代方法。

if query.startswith('i'):
        text = query[:0] + 'İ' + query[1:]

1 个答案:

答案 0 :(得分:0)

您可以通过unidecode()将重音符号转换为ASCII

import unidecode
accented_string = 'İ'
unaccented_string = unidecode.unidecode(accented_string)
YourClass.objects.get(text__icontains=unaccented_string)