2012-09-21 6 views
0

나는 사용자가 성/이름, 사용자 이름, 이메일 주소 및 전화 번호를 기입 할 수있는 계정 설정 페이지가 있습니다. Django가 제공 한 PasswordChangeForm을 이용하여 사용자가 동일한 단일 형식으로 비밀번호를 변경할 수 있도록합니다.Django 필수 입력란이 비어있을 때 유효성 검사를 통과하도록 허용 하시겠습니까?

"이전 비밀번호", "새 비밀번호"를 작성하고 "새 비밀번호"를 반복하지 않아도 사용자가 이메일 주소 나 전화 번호와 같은 개인 정보를 변경할 수있게하고 싶습니다. ". (예를 들어, WordPress 프로필 설정 페이지는이 방식으로 작동합니다.)

이 세 개의 암호 필드는 하나 이상 비워두면 유효성을 검사해야합니다.

views.py에서 다음을 수행하면 다른 필드 중 하나에 오류가있을 때 비밀번호 필드의 양식 오류가 발생합니다.

@sensitive_post_parameters() 
@csrf_protect 
@login_required 
def account(request): 
    if request.method == "POST": 
     form1 = AccountDetailsForm(request.POST, instance=request.user) 
     form2 = AccountPhoneNumber(request.POST, instance=request.user.get_profile()) 
     form3 = ChangePasswordForm(user=request.user, data=request.POST) 
     if form1.is_valid() and form2.is_valid(): 
      if form3.has_changed(): 
       if form3.is_valid(): 
        form1.save() 
        form2.save() 
        form3.save() 
        messages.success(request, 'Accont Settings and Password Saved.') 
        return redirect('account') 
      else: 
       form1.save() 
       form2.save() 
       messages.success(request, 'Account Settings Saved.') 
       return redirect('account') 
    else: 
     form1 = AccountDetailsForm(instance=request.user) 
     form2 = AccountPhoneNumber(instance=request.user.get_profile()) 
     form3 = ChangePasswordForm(user=request.user) 
    return render(request, 'account.html', locals()) 

팁이 있습니까? 감사!

답변

1

내 자신의 질문에 대해 문서화되지 않은 해결책을 찾은 것처럼 보입니다. 바로 내가 원래의 질문에 제공 한 조각의 코드로 문제를 해결

form3 = ChangePasswordForm(user=request.user, data=request.POST, empty_permitted=True) 

을 : 아래와 같이 그냥 양식을 정의 할 때 매개 변수로 empty_permitted=True를 추가해야합니다.

+0

여전히 문서화 된 솔루션을 사용하고'clean' 메소드를 사용하는 것이 좋습니다. – demalexx

관련 문제