2012-05-12 29 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選項 –