为什么没有exists()方法?

时间:2014-09-22 09:32:27

标签: django

我使用Ajax请求在视图中发送数据:

def ajax_username_check(request):
    result = 'default'

    if request.method == "POST" and request.is_ajax():
        username = request.POST.get('username', '')     

        username_req = User.objects.get(username=username)      

        if username_req.exists():
            result = '1'
        else:
            result = '0'        

    data = {'result': result}

    return HttpResponse(json.dumps(data), content_type='application/json')  

结果写入日志时出现以下错误消息:

Internal Server Error: /accounts/ajax_username_check/
Traceback (most recent call last):
  File "/home/kalinins/.virtualenvs/zapsum/lib/python3.4/site-packages/django/core/handlers/base.py", line 112, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/kalinins/.virtualenvs/zapsum/zapsum/app_accounts/views.py", line 88, in ajax_username_check
    if username_req.exists():
AttributeError: 'User' object has no attribute 'exists'

为什么exists()不起作用?我在文档上做了一切: https://docs.djangoproject.com/en/1.6/ref/models/querysets/#exists

1 个答案:

答案 0 :(得分:3)

exists()是查询集上的方法。但是username_req是用户对象,而不是查询集,因此您会收到属性错误。

您可以使用返回查询集的get(),而不是使用filter()。然后,您可以使用exists()

username_req = User.objects.filter(username=username)      

if username_req.exists():
    result = '1'
else:
    result = '0'        

在原始代码中使用get()的另一个问题是,它可能会引发User.DoesNotExist异常,而您却没有这样做。