我对使用AdminPasswordChangeForm
更改密码的想法不多。我得到了一个教程并找到了这个片段:
def user_change_password(request, id):
form = AdminPasswordChangeForm(User, request.POST)
if form.is_valid():
new_user = form.save()
msg = _('Password changed successfully.')
request.user.message_set.create(message=msg)
return HttpResponseRedirect('..')
else:
form = AdminPasswordChangeForm(User)
extra_context = {
'form': form,
'change': True
}
return direct_to_template(request,"users/user_password_change.html",
extra_context = extra_context)
url.py
和模板user_password_chage.html
一切正常。在模板级别,它显示一个包含两个密码字段的表单:一个是密码,第二个是密码(再次)。但是当我点击提交按钮更改密码时,它会显示以下错误:
必须使用User实例作为第一个参数调用unbound方法set_password()(改为使用unicode实例)
我是Django的新手,并且在官方文档中没有找到任何关于此表单的内容。
答案 0 :(得分:1)
表单实例化调用的第一个参数应该是用户实例,而不是User类 - 即它应该是您想要更改其密码的实际用户。据推测,这是当前用户,因此您可以从request.user
获得该用户:
form = AdminPasswordChangeForm(request.user, request.POST)