Django PasswordChangeForm实现错误

时间:2016-02-04 14:00:13

标签: django change-password

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

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

据我了解,这应该有效,但我一直收到这个错误:

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

我真的不明白这意味着什么......

2 个答案:

答案 0 :(得分:0)

您可能错过了将用户传递给表单吗?

PasswordChangeForm(user=request.user)

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

答案 1 :(得分:0)

Django带有内置password_change视图。使用它会更容易,而不是使用自己的。有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()并保存表单,以便设置新密码。可能还需要进行其他代码更改,正如我在答案开头所说的那样,您会发现使用内置视图更容易。