Найти - Пользователи
Полная версия: Кастомизированный вывод ошибки формы
Начало » Django » Кастомизированный вывод ошибки формы
1
romankrv
Всех с Новым Годом!

И у меня вопрос

Если такая форма :
class MyForm(forms.ModelForm):
password1 = forms.CharField(widget=forms.PasswordInput())
password2 = forms.CharField(widget=forms.PasswordInput())

def clean(self):
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError(_(u'Пароли не совпадают.'))
return self.cleaned_data
И для ее вывода я использую кастомизированный темплэйт например так:

{{ form.password1.label_tag }}
{{ form.password1.errors }}
{{ form.password1 }}
{{ form.password1.help_text }}

то вывод {{ form.password1.errors }} не обеспечивается в случаи несовпадения паролей,
если ли же я использую в темплэйте такую запись :
{{ form }}
то в случаи несовпадения паролей выводится сообщение, заданое в def clean.

Почему так происходит и как нужно подкорректировать класс формы ?

Спасибо.
Александр Кошелев
А к какому полю относится эта ошибка или не к полю? Когда ответишь на этот вопрос, тогда поймешь куда копать.
romankrv
Да, понял как надо поступать в таких случаях
1) при таком коде ошибка попадает в словарь ошибок
In [72]: f = MyForm({'password1':'qqqq','password2':'qqq',})

In [73]: f.errors
Out[73]: {'__all__': [u'You must type the same password each time']}
2) в коде метода задавать какую то переменную, а в темплэйте проверять ее существование и выводить блок с этой ошибкой.

правда ошибка помещается в позицию с ключем __all__ и было бы наверное более правильно создать там новый ключ, имя которого, требуемое поле, а так непонятно, при чтении этого словоря – что какое поле сгенерировало ошибку.

Правилен ли такой подход?

ps
да кастомизированный вывод формы немного конечно нагруженный то есть приходится жертвовать компактностью кода.
Александр Кошелев
Не изобретай велосипед, лучше документацию внимательно почитай: http://docs.djangoproject.com/en/dev/ref/forms/validation/
romankrv
Daevaorn
почитай: http://docs.djangoproject.com/en/dev/re … alidation/
Да это помогло очень. Бывает же такое, что слона в зоопарке не заметил.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB