Ошибка ввода в уже утвержденную форму?
После того, как мой form.Form
проверяет введенные пользователем значения, я передаю их отдельному (внешнему) процессу для дальнейшей обработки. Этот внешний процесс потенциально может найти дополнительные ошибки в значениях.
Есть ли способ внедрить эти ошибки в уже проверенную форму, чтобы их можно было отображать с помощью обычных методов отображения ошибок формы (или есть лучшие альтернативные подходы)?
Одно из предложений заключалось в том, чтобы включить внешнюю обработку в проверку формы, что не идеально, потому что внешний процесс делает гораздо больше, чем просто проверку.
Ответы
Ответ 1
Form._errors
можно рассматривать как стандартный словарь. Было бы неплохо использовать класс ErrorList
и добавлять ошибки в существующий список:
from django.forms.utils import ErrorList
errors = form._errors.setdefault("myfield", ErrorList())
errors.append(u"My error here")
И если вы хотите добавить django.forms.forms.NON_FIELD_ERRORS
ошибки, используйте django.forms.forms.NON_FIELD_ERRORS
(по умолчанию "__all__"
) вместо "myfield"
.
Ответ 2
Для Django 1.7+ вы должны использовать form.add_error()
вместо прямого доступа к form._errors
.
Документация: https://docs.djangoproject.com/en/stable/ref/forms/api/#django.forms.Form.add_error
Ответ 3
Вы можете добавить дополнительные сведения об ошибке непосредственно в атрибут _errors
:
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
Ответ 4
Принятый ответ правильный, но похоже на Django 1.5 ErrorList
расположенный в файле util.py
Таким образом, импорт будет выглядеть так from django.forms.util import ErrorList
.