Inject errors into already validated form?
DjangoDjango FormsDjango Problem Overview
After my form.Form
validates the user input values I pass them to a separate (external) process for further processing. This external process can potentially find further errors in the values.
Is there a way to inject these errors into the already validated form so they can be displayed via the usual form error display methods (or are there better alternative approaches)?
One suggestions was to include the external processing in the form validation, which is not ideal because the external process does a lot more than merely validate.
Django Solutions
Solution 1 - Django
For Django 1.7+, you should use form.add_error()
instead of accessing form._errors
directly.
Documentation: https://docs.djangoproject.com/en/stable/ref/forms/api/#django.forms.Form.add_error
Solution 2 - Django
Form._errors
can be treated like a standard dictionary. It's considered good form to use the ErrorList
class, and to append errors to the existing list:
from django.forms.utils import ErrorList
errors = form._errors.setdefault("myfield", ErrorList())
errors.append(u"My error here")
And if you want to add non-field errors, use django.forms.forms.NON_FIELD_ERRORS
(defaults to "__all__"
) instead of "myfield"
.
Solution 3 - Django
You can add additional error details to the form's _errors
attribute directly:
https://docs.djangoproject.com/en/1.5/ref/forms/validation/#described-later https://docs.djangoproject.com/en/1.6/ref/forms/validation/#modifying-field-errors
Solution 4 - Django
Add error to specific field :
form.add_error('fieldName', 'error description')
**Add error to non fields **
form.add_error(None, 'error description')
#Only pass None instead of field name