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