2016-12-24 1 views
2

정말 간단한 양식이지만 어디에서 잘못 됐는지를 모릅니다. 내가 장고 사이트의 디버그 모드를 확인할 때, 나는 new 필드의 clean_data은 다음의 그림과 같이 누락 된 것을 발견 : 당신이 같은 신규 및 기존 암호를 입력하면form.cleaned_data는 양식 처리 중입니다

cleaned_data['new'] is missing

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 cleaned_data 이후에 수행 된 clean_new_confirm에는 new 값이 포함되어 있지 않습니다.

get을 사용하면 오류를 피할 수 있습니다. 당신은 매우 환영합니다 :)입니다 @JianWei

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'] 
+0

: cleaned_data는 new 가치와 네 경우를 포함하는 경우 new_confirmnew가 동일한 경우 확인 먼저 확인 – neverwalkaloner