Django: Добавить non_field_error из вида? - PullRequest
29 голосов
/ 19 ноября 2010

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

Ответы [ 3 ]

40 голосов
/ 13 марта 2015

Вы также можете использовать довольно элегантный метод add_error () .Работает для Django> = 1.7.

Если вы установите field как None, форма будет воспринимать ошибку как "non_field".Итак:

form.add_error(None, "I'm non-field error")

работает как шарм.

22 голосов
/ 19 ноября 2010

В дополнение к ответу Даниэля, специальный синтаксис:

form.errors['__all__'] = form.error_class(["error msg"])

Обратите внимание, что вы можете заменить '__all__' на константу NON_FIELD_ERRORS для лучшей совместимости (кредит grafa ).

from django.forms.forms import NON_FIELD_ERRORS
6 голосов
/ 19 ноября 2010

Ну, вы можете вставить что-нибудь в словарь 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...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...