在Django中,我尝试使用form.errors.as_json()来获取所有表单错误,这里是示例json数据字符串。
{"password2":[{"message": "This password is too short. It must
contain at least 8 characters.","code":"password_too_short"}]}
我想在json中循环并获取所有“message”键,这样我就可以用它在ajax调用之后通知用户。
由于
答案 0 :(得分:0)
无论如何,我刚刚解决了我的问题而只想分享我的所作所为。
<强> views.py 强>
if form.is_valid():
...
else:
# Extract form.errors
errMsg= None
errMsg = [(k, v[0]) for k, v in form.errors.items()]
return JsonResponse(errMsg)
Ajax活动
$.ajax({
method: "POST",
url: '\your_url_here',
data: $form.serialize(),
cache: false,
dataType: "json",
beforeSend: function(){
//Start displaying button's working animation
//Do some button or loading animation here...
}
},
success: function(jResults)
{
//This line is to remove field name display
var strErr = jResults + ''; //make json object as string
strErr = strErr.split(",").pop();
alert(strErr);
}
});
希望这对任何面临类似问题的人有所帮助。顺便说一句,我使用的是Django 2.0和Python 3.6 +
由于 MinedBP
答案 1 :(得分:0)
正确的答案应该是:
return HttpReponse(form.errors.as_json(), status=400)
。
在AJAX调用中,您可以获取内容:
`$.post("{% url 'your_url'%}", your_payload).done(function(data) {
do_something();
}).fail(function(xhr){
// Here you can get the form's errors and iterate over them.
xhr.responseText();
});`
您正在发送200 HTTP响应,如果错误,您应该返回400 HTTP响应(错误请求),就像没有AJAX表单的Django一样。