web-dev-qa-db-fra.com

Injecter des erreurs dans un formulaire déjà validé?

Après mon form.Form valide les valeurs saisies par l'utilisateur. Je les transmets à un processus distinct (externe) pour un traitement ultérieur. Ce processus externe peut potentiellement trouver d'autres erreurs dans les valeurs.

Existe-t-il un moyen d'injecter ces erreurs dans le formulaire déjà validé afin qu'elles puissent être affichées via les méthodes habituelles d'affichage des erreurs de formulaire (ou existe-t-il de meilleures approches alternatives)?

Une suggestion a été d'inclure le traitement externe dans la validation du formulaire, ce qui n'est pas idéal car le processus externe fait bien plus que simplement valider.

93
Parand

Form._errors peut être traité comme un dictionnaire standard. Il est considéré comme une bonne forme d'utiliser la classe ErrorList et d'ajouter des erreurs à la liste existante:

from Django.forms.utils import ErrorList
errors = form._errors.setdefault("myfield", ErrorList())
errors.append(u"My error here")

Et si vous souhaitez ajouter des erreurs non liées à un champ, utilisez Django.forms.forms.NON_FIELD_ERRORS (par défaut à "__all__") au lieu de "myfield".

87
John Millikin

Pour Django 1.7+, vous devez utiliser form.add_error() au lieu d'accéder à form._errors directement.

Documentation: https://docs.djangoproject.com/en/stable/ref/forms/api/#Django.forms.Form.add_error

100
rstuart85

Vous pouvez ajouter des détails d'erreur supplémentaires à l'attribut _errors Du formulaire directement:

https://docs.djangoproject.com/en/1.5/ref/forms/validation/#described-laterhttps://docs.djangoproject.com/en/1.6/ref/forms/validation/# modifying-field-errors

14
Jonny Buchanan