ユーザーが姓名、ユーザー名、メールアドレス、電話番号を入力できるアカウント設定ページがあります。またPasswordChangeForm
、Django が提供する を利用して、ユーザーが同じ単一のフォームでパスワードを変更できるようにしています。
ユーザーが「古いパスワード」「新しいパスワード」「新しいパスワード」を入力しなくても、メールアドレスや電話番号などの個人情報を変更できるようにしたいと考えています。(たとえば、WordPress のプロファイル設定ページはこのように機能します。)
これら 3 つのパスワード フィールドは、1 つ以上が空白でない場合にのみ検証する必要があります。
my views.py
still で次の操作を行うと、他のフィールドのいずれかにエラーがある場合に、パスワード フィールドのフォーム エラーが発生します。
@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())
任意のヒント?ありがとう!