form.cleaned_data во время обработки формы

Это действительно простая форма, но я не знаю, в чем дело. Когда я проверял режим отладки сайта django, я обнаружил, что clean_data new Поле отсутствует, так как на картинке следующее:

cleaned_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']
Другие вопросы по тегам