0

を使用してパスワードを変更することについて、あまり考えがありません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と templateですべて問題ありませんuser_password_chage.html。テンプレート レベルでは、2 つのパスワード フィールドを持つフォームが表示されています。しかし、送信ボタンをクリックしてパスワードを変更すると、次のエラーが表示されます。

バインドされていないメソッド set_password() は、User インスタンスを最初の引数として呼び出す必要があります (代わりに unicode インスタンスを取得します)

私は Django の初心者であり、このフォームに関する公式ドキュメントは見つかりませんでした。

4

1 に答える 1

2

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

form = AdminPasswordChangeForm(request.user, request.POST)
于 2012-05-12T21:23:21.550 に答える