Как переопределить сообщения об ошибках password_change в django? - PullRequest
1 голос
/ 14 марта 2011

Я провел в сети целую вечность, как переопределить форму change_password в django.Я создал свои формы, и я могу успешно изменить свои пароли.Теперь я хочу отобразить свои ошибки на странице.(Кстати, я использую django-регистрацию.)

Проблема в том, что я должен изменить сообщения об ошибках.В моем шаблоне я использую эту функцию для отображения ошибок new_password1:

{% if form.new_password1.errors %}
     <div class="error_message"> blah </div>
{% endif %}

Однако она состоит из всех ошибок new_password1.Я посмотрел документы и обнаружил, что CharField только требовал, макс и мин.Мне нужно проверить каждую конкретную ошибку new_password1 (ошибка подтверждения, требуемая ошибка и min, max) и создать свои собственные сообщения об ошибках.Поскольку у CharField нет подходящего ключевого слова, я попытался очистить метод в файле forms.py, который выглядит следующим образом:

 def clean_password2(self):                                                                                                                                                                                                                               
        if  'new_password1' in self.cleaned_data and 'new_password2' in self.cleaned_data:                                                                                                                                                                   
            if self.cleaned_data['new_password1'] != self.cleaned_data['new_password2']:                                                                                                                                                                     
                raise forms.ValidationError(_(u"no match"))                                                                                                                                                                                                

        return cleaned_data   

Наконец, я не знаю, как проверить эту проверку clean_password2 в моем шаблоне,Когда я писал страницу регистрации, я могу отображать все свои ошибки, зацикливая ошибки.И он отображает все переопределенные ошибки.На этот раз это не работает.Итак, мои вопросы:

1- Как я могу проверить все конкретные ошибки в моих шаблонах?например, если form.new_password1.required.errors

2- Как я могу отобразить это сообщение clean_password2?

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

В django-говорить то, что вы называете представлением, является шаблоном. Это довольно запутанно!

Обновление: я вижу, что вы определяете функцию clean_password2, но вы проверяете поля с именами new_password1, new_password2.

Если у вас нет поля с именем password2, , то - это поле, которое проверяет ваш чистый метод.

Сообщения для clean_password2 генерируются в {{ form.password2.errors }}, но для меня, похоже, у вас нет поля с именем password2.

Измените имя вашего метода на clean_new_password2.

{% if form.new_password1.errors %}{{ form.new_password1.errors }}{% endif %} 
{% if form.new_password2.errors %}{{ form.new_password2.errors }}{% endif %}

Очистка поля формы выполняется для каждого поля. Вы получаете доступ к ошибкам вне объекта поля.

0 голосов
/ 14 марта 2011

Как сказал @Yuji, используйте {% if form.non_field_errors %} в своем шаблоне.

Теперь немного о юзабилити. Что касается формы регистрации пользователя и смены пароля, единственные неполевые ошибки, которые вы можете ожидать, будут не соответствовать паролям, поэтому в отличие от других форм, где вы собираетесь печатать неполевые ошибки в самом начале, для этих форм имеет смысл печатать одна ошибка, не связанная с полями, перед двумя полями ввода пароля, возможно, оборачивая их в родительский элемент, который имеет красный фон, чтобы сделать более очевидным, что значения этих двух полей связаны и что ошибка касается двух полей, а не форма в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...