当字符串包含空格时,Django过滤器icontains不返回任何结果-mysql.connector.django

时间:2019-05-14 10:10:57

标签: python mysql django

我有一个搜索自动完成框,当用户输入查询字符串时,该框会返回课程。这在我的开发服务器上可以正常工作,但是当部署到现场时,它仅在用户输入单个单词而不是多个空格分隔的单词时返回结果。这是一个问题,因为课程标题可以包含空格。

由于无法控制的原因,我不得不使用mysql.connector.django作为数据库后端。我对数据库配置的访问权限有限。

这是在开发中有效的代码,但在查询同一数据库时无法实时运行:

courses = (Course.objects.filter(module__open=True, module__term__academic_year__live=True)
           .filter(title__icontains=query)
           .distinct()
           .order_by('category__title', 'title'))

这些是数据库设置:

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',

        ...

        'PORT': '3306',
        'OPTIONS': {
            'use_pure': True
        }
    }
}

use_purethis bug而被设置。

我知道默认情况下MySQL查询不会考虑大小写,但我认为使用icontains仍会返回结果。

1 个答案:

答案 0 :(得分:0)

query字符串作为URL参数传递,我发现当它包含空格时,视图试图将其处理为%20,因此显然没有返回任何结果。

我取消了对查询的引用,如下所示:

from urllib.parse import unquote

...

query = unquote(query)

我假设这是服务器的复杂性。我从来不需要对其他部署在其他地方的应用程序执行此操作。但是,如果有人可以确认,我将对此感兴趣。