2012-05-12 18 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で結構です。テンプレートレベルでは、2つのパスワードフィールドを持つフォームが表示されています.1つはパスワードで、もう1つはパスワード(もう一度)です。私はそれが次のエラーを示してパスワードを変更するには、送信ボタンをクリックすると、しかし:

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

を私はジャンゴの初心者ですし、公式ドキュメントでは、このフォームについては何も見つかりませんでした。

答えて

1

フォームインスタンス化呼び出しの最初のパラメータは、Userクラスではなく、ユーザーインスタンスであると想定されます。つまり、パスワードを変更する実際のユーザーである必要があります。おそらくそれが現在のユーザーなので、request.userから

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

という返信をいただきありがとうございます。 IDを渡してパスワードを変更しています。だからそれによると私は最初にIDとのユーザー名の関連付けを見つける必要がありますし、そのユーザー名を関数に渡しますか? is_staffオプションを同じidに変更しなければならない場合はどうすればいいですか? –

+1

いいえ、ユーザー名ではなく、ユーザーインスタンスです。 User.objects.get(pk = my_id)はそれを行います。 –

+0

正常に実行され、is_staffオプションの変更について –

関連する問題