У меня есть форма Django с кучей полей, которые я просматриваю в шаблоне. У меня также есть некоторые прямые входные элементы HTML, которые я хочу проверить в представлении, обратившись к request.POST
vars. Если они не проверяются, я хочу ввести ошибку в форму Django, чтобы отобразить ее на странице. Есть ли способ сделать это?
Django: Добавить non_field_error из представления?
Ответ 1
Вы также можете использовать довольно элегантный метод add_error(). Работает для Django >= 1.7.
Если вы установите field
как None
, форма обработает ошибку как "non_field".
Итак:
form.add_error(None, "I'm non-field error")
работает как шарм.
Ответ 2
Добавляя к Daniel ответ, конкретный синтаксис:
form.errors['__all__'] = form.error_class(["error msg"])
Обратите внимание, что вы можете заменить '__all__'
на константу NON_FIELD_ERRORS
для лучшей совместимости (кредит grafa).
from django.forms.forms import NON_FIELD_ERRORS
Ответ 3
Ну, вы можете вставить что-либо в словарь errors
, а ошибки без полей - errors['__all__']
.
Но почему вы держите некоторые поля вне формы Django, только чтобы вернуть свои ошибки в конце? Почему бы не поместить все поля в форму в первую очередь? Если вы используете модельную форму и хотите добавить к ней поля, вы можете сделать это в Django, просто объявив поля на уровне формы, - тогда вы можете определить для них чистые методы в форме.
class ExtendedModelForm(forms.ModelForm):
extra_field_1 = forms.CharField()
extra_field_2 = forms.CharField()
def clean_extra_field_1(self):
...etc...