在Django中使用AdminPasswordChangeForm更改密码时出错

时间:2012-05-12 20:42:32

标签: django django-forms django-admin django-templates

我对使用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的新手,并且在官方文档中没有找到任何关于此表单的内容。

1 个答案:

答案 0 :(得分:1)

表单实例化调用的第一个参数应该是用户实例,而不是User类 - 即它应该是您想要更改其密码的实际用户。据推测,这是当前用户,因此您可以从request.user获得该用户:

form = AdminPasswordChangeForm(request.user, request.POST)