2012-05-12 40 views
0

我对使用AdminPasswordChangeForm更改密码没有太多想法。我有一个教程,发现这个片断:使用Django中的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。在模板级别,它显示一个带有两个密码字段的表单:一个是密码,第二个是密码(再次)。但是,当我点击提交按钮来修改它显示了以下错误的密码:

unbound method set_password() must be called with User instance as first argument (got unicode instance instead)

我是一个新手,Django的,并没有发现有关这种形式在官方文档任何东西。

回答

1

表单实例化调用的第一个参数应该是用户实例,而不是用户类 - 即它应该是您想要更改其密码的实际用户。大概这是目前的用户,所以你可以从request.user得到:

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

感谢您的答复。我通过一个ID来更改他/她的密码。所以根据这一点,我必须先找出与id相关的用户名,然后在函数中传递该用户名? 除此之外,如果我还必须改变is_staff选项为相同的ID那么我该怎么办? –

+1

不,不是用户名,用户实例。 User.objects.get(PK = my_id)会做到这一点。 –

+0

它运行成功,更改is_staff选项 –

相关问题