我使用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
答案 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
异常,而您却没有这样做。