Django PasswordChangeForm 实现错误

Django PasswordChangeForm implementation error

我正在使用 Django 用户系统,我正在尝试实现他们的 PasswordChangeForm,如下所示:

    class Profile(LoginRequiredMixin, FormView):
       template_name = 'user/profile.html'
       form_class = PasswordChangeForm

据我所知,这应该可行,但我一直收到此错误:

__init__() missing 1 required positional argument: 'user'

我不太明白那是什么意思....

您可能缺少将用户传递给表单的方法吗?

PasswordChangeForm(user=request.user)

This question 非常相似,可能会对您有所帮助

Django 自带一个内置的 password_change view. It would be easier to use this, rather than use your own. There are instructions in the docs

您的视图当前的错误是您没有将登录用户传递给表单。您可以通过覆盖 get_form_kwargs.

来做到这一点
class Profile(LoginRequiredMixin, FormView):

    def get_form_kwargs(self):
        kwargs = super(Profile, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

完成后,您还需要覆盖 form_valid() 并保存表单以便设置新密码。可能还需要更改其他代码,所以正如我在答案开头所说的那样,您会发现使用内置视图更容易。