Как получить non_field_errors в шаблоне при использовании FormView и ModelForm

#django #python-2.7 #django-forms #django-templates #django-views

#django #python-2.7 #django-формы #django-шаблоны #django-представления

Вопрос:

Я использую FormView с ModelForm для обработки регистрационной формы. В случае дублирования электронной почты я вызываю ValidationError. Но это сообщение об ошибке недоступно в шаблоне регистрации как non_field_errors.

Когда я попытался найти, что такое form.errors в методе form_invalid в RegistrationView, он показывал ожидаемые ошибки, но почему-то не передавался в шаблон.

Комментарии:

1. Вам нужно будет показать шаблон. Для начала, это non_field_errors .

2. @DanielRoseman: я отредактировал это. Я обнаружил, что FormView не должен работать с ModelForm https://github.com/django/django/blob/master/django/views/generic/edit.py#L181-190

Ответ №1:

Прежде всего, мы должны убедиться, что это non_field_error или ошибка поля.

Где вы сделали рейз ValidationError в форме модели , которую вы определили ?

  1. Если он вызван в def clean() форме, то он будет присутствовать в non_field_errors и может быть доступен через form.non_field_errors in template
  2. Если он возникает в def clean_<field_name>() then, это будет ошибка поля, доступ к которой можно получить через form.errors или form.<field_name>.error в шаблоне

Пожалуйста, решите для себя, где вы хотите его поднять.

Примечание: ModelForm может работать с FormView. Но в идеале для этого есть CreateView и UpdateView

Ответ №2:

Что-то вроде этого?

 {% if my_form.non_field_errors %}
    <div class="alert alert-error">
    <ul>
        {% for error in my_form.non_field_errors %}
            <li>{{ error }}</li>
        {% endfor %}
    </ul>
    </div>
{% endif %}