即使使用__exact,Django字段查找也会返回不区分大小写的结果

时间:2014-01-17 18:57:37

标签: python django

以下是我的观点:

@csrf_exempt
def api(request):
    if request.method=="POST" and 'cmd' in request.POST and request.POST['cmd'] == "post":
        try:
            usr = Usr.objects.get(secret__exact=request.POST['secret'])
            # ....
            response = 'ok'
        except Exception as ex:
            response = 'fail'

        return HttpResponse(response)

即使有错误的秘密,Django仍然会返回正确的对象(例如,如果我在秘密中替换了' A')。怎么了?

1 个答案:

答案 0 :(得分:1)

它与数据库的排序有关,特别是如果您使用的是MySQL。请参阅此处的文档: https://docs.djangoproject.com/en/1.6/ref/models/querysets/#std:fieldlookup-exact

它说: 在MySQL中,数据库表的“排序规则”设置确定精确比较是否区分大小写。这是一个数据库设置,而不是Django设置。

这意味着,数据库上的设置决定了区分大小写而不是你在python中编写的内容。