Подтвердить что ты не робот

Django: Добавить non_field_error из представления?

У меня есть форма Django с кучей полей, которые я просматриваю в шаблоне. У меня также есть некоторые прямые входные элементы HTML, которые я хочу проверить в представлении, обратившись к request.POST vars. Если они не проверяются, я хочу ввести ошибку в форму Django, чтобы отобразить ее на странице. Есть ли способ сделать это?

4b9b3361

Ответ 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...