form.cleaned_data во время обработки формы
Это действительно простая форма, но я не знаю, в чем дело. Когда я проверял режим отладки сайта django, я обнаружил, что clean_data new
Поле отсутствует, так как на картинке следующее:
class PasswordEditForm(forms.Form):
old = forms.CharField(widget=forms.PasswordInput, min_length=6,
max_length=30, label='舊密碼', label_suffix=' ')
new = forms.CharField(widget=forms.PasswordInput, min_length=6,
max_length=30, label='新密碼', label_suffix=' ')
new_confirm = forms.CharField(widget=forms.PasswordInput, min_length=6,
max_length=30, label='再輸入一次', label_suffix=' ')
def clean_new(self):
cd = self.cleaned_data
if cd['old'] == cd['new']:
raise forms.ValidationError('新密碼與舊密碼相同')
return cd['new']
def clean_new_confirm(self):
cd = self.cleaned_data
if cd['new'] != cd['new_confirm']:
raise forms.ValidationError('兩次輸入密碼不相符')
return cd['new_confirm']
1 ответ
Решение
Проблема в том, что если вы введете тот же новый и старый пароль, то clean_new
метод вызывает исключение и не возвращает значения. Вот почему в clean_new_confirm
который выполнил после clean_new
cleaned_data не содержит new
значение.
Вы можете избежать ошибок, просто используя get
, Сначала проверьте, содержит ли cleaned_data new
значение и если да, проверьте, если new
равно new_confirm
:
def clean_new_confirm(self):
cd = self.cleaned_data
new_pass = cd.get('new')
if new_pass and new_pass != cd.get('new_confirm'):
raise forms.ValidationError('兩次輸入密碼不相符')
return cd['new_confirm']