2010-07-15 7 views
1

"password"및 "confirm password"필드가있는 사용자 등록 양식이 있습니다. "min_length"를 암호 필드에 추가 한 다음 사용자 정의 clean_confirm_password 메소드를 통해 제출 된 데이터를 실행하면 "키 오류/암호"오류가 발생합니다.Django - min_length가 설정된 경우 암호 정리가 실패합니다.

이는 confirm_password 필드가 일치하는지 여부에 관계없이 암호 필드가 5 자 미만일 때 발생합니다.

"confirm_password"에 "min_length"를 추가하려고 시도했지만 여전히 동일한 오류가 발생합니다.

"min_length"를 완전히 제거하면 모든 것이 잘 작동합니다.

도움을 주시면 감사하겠습니다.

내 forms.py 파일 : 당신이 self.cleaned_data에 액세스 할 때

class NewUser(forms.Form): 
    email = forms.EmailField(max_length=75) 
    first_name = forms.CharField(max_length=45) 
    last_name = forms.CharField(max_length=45) 
    password = forms.CharField(min_length=5, max_length=30, widget=forms.PasswordInput(render_value=False)) 
    confirm_password = forms.CharField(max_length=30, widget=forms.PasswordInput(render_value=False)) 

    def clean_confirm_password(self): 
     confirm_password = self.cleaned_data['confirm_password'] 
     original_password = self.cleaned_data['password'] 
     if original_password != confirm_password: 
      raise forms.ValidationError("Password doesn't match") 

     return confirm_password 

답변

2

5 자 미만의 암호를 입력하면 min_length 인증이 실패하므로 password은 양식 cleaned_data 사전에 포함되지 않습니다. 누락 된 키에 액세스하려고하면 KeyError이 표시됩니다.

대신, 당신은 시도해야 : 암호가 너무 짧으면 ''을 반환합니다

original_password = self.cleaned_data.get('password', '') 

합니다.

제쳐두고, clean_myfieldname 메서드는 한 필드에만 의존해야합니다. 서로 의존하는 필드를 정리하고 유효성을 검사하려면 clean 방법을 사용하십시오 (django docs 참조).

+0

이것은 챔피언처럼 일했습니다! 또한'clean' 메소드를 지적 해 주셔서 감사합니다. 그에 따라 변경했습니다. –

0

, 양식이 암호 필드를 야기 해당 필드의 모든 유효성을 검사는 그 min_length 인수에 대해 검증한다.

+0

죄송합니다. 이제 내 질문이 완전히 명확하지 않다는 것을 알 수 있습니다. 필자가 설명한대로 암호 필드의 유효성을 검사하고 싶지만 내 오류 메시지와 함께 되돌아 오는 대신 키 오류가 발생합니다. 따라서 비밀번호 필드에 3 자리 숫자를 입력하고 비밀번호 입력란 (일치 여부와 상관 없음)에 비밀번호를 입력하면 "충분하지 않은 문자"오류가 발생하는 대신 키 오류가 발생합니다. –

관련 문제