45 votes

Retour des erreurs de formulaire Django pur en JSON

J'ai un Django forme que je suis la validation dans des conditions normales de Django vue. Je suis à essayer de comprendre comment extraire la pure erreurs (sans mise en forme HTML). Ci-dessous le code que j'utilise pour le moment.

return json_response({ 'success' : False,
                       'errors' : form.errors })

Avec ceci, j'obtiens l'infâme objet proxy erreur de Django. Forcer chaque erreur dans Unicode ne suffit pas non plus, parce qu'alors, chacune des erreurs' __unicode__ méthode sera appelée efficacement HTML-izing il.

Des idées?

EDIT:

Pour ceux que cela intéresse, c'est la définition de l' 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')

37voto

SystemParadox Points 1864

Cela semble avoir été amélioré. Les travaux suivants dans Django 1.3:

 return json_response({
    'success': False,
    'errors': dict(form.errors.items()),
})
 

Plus besoin de __unicode__ ni de traduction paresseuse. Cela donne également un tableau complet des erreurs pour chaque champ.

26voto

Deniz Dogan Points 8848

Je l'ai eu après beaucoup de déconner, de tester différentes choses. NB: je ne suis pas sûr que cela fonctionne également avec l'internationalisation. Cela prend également la première erreur de validation pour chaque champ, mais la modifier pour obtenir toutes les erreurs devrait être assez facile.

 return json_response({ 'success' : False,
                       'errors' : [(k, v[0].__unicode__()) for k, v in form.errors.items()] })
 

4voto

Arthur Debert Points 3632

Le problème ici est que le message d'erreur est objet de traduction paresseux. Les docs mentionnent ceci:

Assurez-vous simplement que vous avez sure_ascii = False et utilisez un LazyEncoder.

1voto

0077cc Points 11

Nous pouvons le faire:

 import simplejson as json

errors = json.dumps(form.errors)
return HttpResponse(errors, mimetype='application/json')
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X