Den*_*gan 38 django unicode json lazy-evaluation django-forms
我有一个Django表单,我在正常的Django视图中进行验证.我试图找出如何提取纯错误(没有HTML格式).下面是我目前正在使用的代码.
return json_response({ 'success' : False,
'errors' : form.errors })
Run Code Online (Sandbox Code Playgroud)
有了这个,我从Django得到了臭名昭着的代理对象错误.将每个错误强制转换为Unicode也不会起作用,因为这样__unicode__就可以有效地调用每个错误的方法.
有任何想法吗?
编辑:
对于那些感兴趣的人,这是定义json_response:
def json_response(x):
import json
return HttpResponse(json.dumps(x, sort_keys=True, indent=2),
content_type='application/json; charset=UTF-8')
Run Code Online (Sandbox Code Playgroud)
Sys*_*dox 34
这看起来有所改善.以下适用于Django 1.3:
return json_response({
'success': False,
'errors': dict(form.errors.items()),
})
Run Code Online (Sandbox Code Playgroud)
不再需要__unicode__或懒惰的翻译.这也为每个字段提供了完整的错误数组.
Den*_*gan 24
经过大量的搞乱,测试不同的东西后得到它.NB我不确定这是否也适用于国际化.这也会为每个字段带来第一个验证错误,但修改它以获得所有错误应该相当容易.
return json_response({ 'success' : False,
'errors' : [(k, v[0].__unicode__()) for k, v in form.errors.items()] })
Run Code Online (Sandbox Code Playgroud)
lam*_*ave 24
对于Django 1.7+,使用Form.errors.as_json()或类似的东西:
errors = {f: e.get_json_data() for f, e in form.errors.items()}
return json_response(success=False, data=errors)
Run Code Online (Sandbox Code Playgroud)