나는 사용자가 성/이름, 사용자 이름, 이메일 주소 및 전화 번호를 기입 할 수있는 계정 설정 페이지가 있습니다. 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())
팁이 있습니까? 감사!
여전히 문서화 된 솔루션을 사용하고'clean' 메소드를 사용하는 것이 좋습니다. – demalexx