我有一个Django表单,我正在一个普通的Django视图中验证它。我试图找出如何提取纯错误(没有HTML格式)。下面是我目前使用的代码。
return json_response({ 'success' : False,
'errors' : form.errors })
这样,我从Django得到了臭名昭著的代理对象错误。将每个错误强制转换为Unicode也不会奏效,因为这样每个错误的__unicode__
方法都会被有效地调用,并将其HTML化。
有什么想法吗?
编辑:
对于那些感兴趣的人来说,这是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')
8条答案
按热度按时间quhf5bfb1#
这一点似乎已经得到了改进。Django 1.3中有以下工作:
不再需要
__unicode__
或延迟转换。这也为每个字段提供了完整的错误数组。yks3o0rb2#
对于Django 1.7+,使用Form.errors.as_json()或类似的方法:
w8f9ii693#
经过大量的混乱和测试后得到的。注意:我不确定这是否也适用于国际化。这也是每个字段的第一个验证错误,但是修改它以获得所有错误应该相当容易。
wmvff8tz4#
这里的问题是错误消息是惰性转换对象。文档确实提到了这一点:
只要确保你有确保ascii=假,并使用一个懒惰编码器。
svujldwt5#
我们可以这样做:
gijlo24d6#
json.dumps
不能序列化django的代理函数(比如lazy translations)。如前所述,您应该创建一个新的Encoder类:
按如下方式使用新编码器:
就是这样:)
bxfogqkk7#
你应该在built方法中使用django。
hpxqektj8#
我使用
get_json_data()
求解如下:我们得到一个有效的json:
参见:www.example.comhttps://docs.djangoproject.com/en/4.1/ref/forms/api/#django.forms.Form.errors.get_json_data
如果我们这样使用
as_json()
:我们得到一个json格式的字符串: