具有自定义用户模型的PasswordChangeForm

Col*_*len 5 django django-forms

我最近通过子类化抽象用户实现了我自己的用户模型.

class NewUserModel(AbstractUser):

我这样做后PasswordChangeForm停止了工作.我UserCreationForm通过覆盖class Meta:模型字段修复了问题.但是,ChangePasswordForm它没有指定模型,我看不出为什么它不适用于新用户模型的任何原因.

views.py

class PasswordChangeView(LoginRequiredMixin, FormView):
    template_name = 'change_password.html'
    form_class = PasswordChangeForm

    def get_form_kwargs(self):
        kwargs = super(PasswordChangeView, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs
Run Code Online (Sandbox Code Playgroud)

小智 8

只是花了大部分时间试图实现这一目标.最终我发现使用FBV实现它非常简单:

@login_required
def UpdatePassword(request):
    form = PasswordChangeForm(user=request.user)

    if request.method == 'POST':
        form = PasswordChangeForm(user=request.user, data=request.POST)
        if form.is_valid():
            form.save()
            update_session_auth_hash(request, form.user)

    return render(request, 'user/password.html', {
        'form': form,
    })
Run Code Online (Sandbox Code Playgroud)


FDN*_*FDN 6

CBV版本:

    类PasswordChangeView(LoginRequiredMixin,FormView):
        模型 = 自定义用户
        form_class = 密码更改表单
        模板名称 = '密码更改.html'

        def get_form_kwargs(self):
            kwargs = super(PasswordChangeView, self).get_form_kwargs()
            kwargs['用户'] = self.request.user
            如果 self.request.method == 'POST':
                kwargs['data'] = self.request.POST
            返回夸格斯

        def form_valid(自我, 形式):
            表单.save()
            update_session_auth_hash(self.request, form.user)        
            返回 super(PasswordChangeView, self).form_valid(form)