__contains过滤器不适用于mysql,适用于本地SQLite数据库

时间:2013-07-11 09:53:12

标签: django django-models django-orm

我有以下代码段:

profiles_list = Profile.objects.filter(
    company=request.user.company,
)
search_query = None
search_key = None
if request.method == 'POST':
    search_key = request.POST.get('skey')
    search_query = request.POST.get('squery', None)
    profiles_list = profiles_list.filter(
        **{'%s__contains' % search_key:search_query}
    )

在我的本地开发机器上使用SQLite数据库,如果我输入search_query,例如“Owal” 它返回一条记录,其中search_key包含“Owal”,所以我得到例如“Kowalski”。

我在使用MySQL的生产服务器上尝试过它并且它不起作用。你知道为什么吗?

1 个答案:

答案 0 :(得分:1)

来自Django documentation

  

SQLite不支持区分大小写的LIKE语句;包含行为   喜欢SQLite的icontains。有关详细信息,请参阅数据库说明。

建议:改为使用%s__icontains