I have a Django form which I'm validating in a normal Django view. I'm trying to figure out how to extract the pure errors (without the HTML formatting). Below is the code I'm using at the moment.
return json_response({ 'success' : False,
'errors' : form.errors })
With this, I get the infamous proxy object error from Django. Forcing each error into Unicode won't do the trick either, because then each of the errors' __unicode__
method will be called effectively HTML-izing it.
Any ideas?
EDIT:
For those interested, this is the definition of 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')
This appears to have been improved. The following works in Django 1.3:
return json_response({
'success': False,
'errors': dict(form.errors.items()),
})
No need for __unicode__
or lazy translation any more. This also gives a full array of errors for each field.
For Django 1.7+ use Form.errors.as_json() or something like this:
errors = {f: e.get_json_data() for f, e in form.errors.items()}
return json_response(success=False, data=errors)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With