2011-01-02 2 views
1

Django 1.0 웹 사이트 개발에 사용자 등록 페이지의 간단한 예제를 복사했습니다. 사용자 이름이 이미 필드는 일반 양식 유효성 검사를 사용하여 검증 촬영하고 내 사용자 지정 깨끗한 메소드가 호출되지 않는 경우Django form.is_valid() 메서드를 호출하지 않습니다. clean_ <fieldname>

class RegistrationForm(forms.Form): 
    username = forms.CharField(label=u'Username', max_length=30) 
    email = forms.EmailField(label=u'Email') 
    password1 = forms.CharField(
     label=u'Password', 
     widget=forms.PasswordInput() 
    ) 
    password2 = forms.CharField(
     label=u'Password (Again)', 
     widget=forms.PasswordInput() 
    ) 

    def clean_password2(self): 
     if 'password1' in self.cleaned_data: 
      password1 = self.cleaned_data['password1'] 
      password2 = self.cleaned_data['password2'] 
      if password1 == password2: 
       return password2 
     raise forms.ValidationError('Passwords do not match.') 

    def clean_username(self): 
     print "Validating username..." 
     username = self.cleaned_data['username'] 
     if not re.search(r'^\w+', username): 
      raise forms.ValidationError('Username can only contain ' 
             'alphanumeric characters and the underscore.') 
     try: 
      User.objects.get(username=username) 
     except User.DoesNotExist: 
      return username 
     raise forms.ValidationError('Username is already taken') 

: 나는 다음과 같은 형식을 정의했습니다. 폼이 register_page에 제출되면 form.is_valid()는 True를 반환합니다.

Django가 clean_ 메소드를 호출하기 위해 알아야 할 사항이 있습니까?

def register_page(request): 
    if request.method == 'POST': 
     print "Posted to registration form" 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      user = User.objects.create_user(
       username=form.cleaned_data['username'], 
      password=form.cleaned_data['password1'], 
       email=form.cleaned_data['email'] 
      ) 
      return HttpResponseRedirect('/') 
    else: 
     form = RegistrationForm() 

    return render_to_response(
     'users/registration.html', 
     context_instance=RequestContext(request, { 
       'form' : form 
       }) 
+0

이 내가 내 양식 메타의 튜플 제외 설정을 수수께끼 같은 - 당신의 청결한 방법이 불려 져야합니다. 올바른'RegistrationForm'을 가져 왔습니까? 어쩌면 유효성 검사 메소드가없는 어딘가에 다른 버전이있을 수도 있습니다. –

+0

'clean_fieldname' 메소드는 특정 순서로 호출되지 않으므로'clean_password2'는 이미'cleaned_data'에있는'password1'에 의존 할 수 없습니다. 'password1' 전에'password2'가 처리되면'ValidationError'가 던져 질 수 있습니다. –

+0

clean_username()을 확실히 건너 뜁니다. –

답변

0

이것은 정말로 수수께끼 같았습니다. 자동 저장 버전의 forms.py를 복원하고 마술처럼 작동하기 시작했지만 위의 코드 조각과 복원 된 파일을 구분할 수있는 차이점은 없습니다.

짧은 답변 : 경우 다른 사람에서 "프로그래머 오류"

3

가 구글을 통해 여기에 도착하고 위의 답변이 도움이되지 않습니다

나는이 같은 문제가 없었다 그리고 내가 아니었다 밝혀졌다

class MyFormClass(ModelForm): 
    class Meta: 
     exclude = ('type_detail') #wrong 

대신 :

class MyFormClass(ModelForm): 
    class Meta: 
     exclude = ('type_detail',) #right 
+0

무엇을 의미합니까? 어디에 적합하지 않나요? 그것은 원래의 질문에 있지 않았습니다. –

+0

메타 형식으로 내 대답을 업데이트했습니다. –

관련 문제