我有一个帐户设置页面,用户可以在其中填写他的名字/姓氏、用户名、电子邮件地址和电话号码。我还利用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())
有小费吗?谢谢!