django SetPasswordForm和AdminPasswordChangeForm

django SetPasswordForm和AdminPasswordChangeForm,django,Django,嗨,我想用上面的表格,但是我得到了 __init__() takes at least 2 arguments (1 given) 我得到了它应该显示的表单,但它从未为我保存新密码 我还需要更改: def __init__(self, user, *args, **kwargs): self.user = user super(AdminPasswordChangeForm, self).__init__(*args, **kwargs) 致: 因为它没有获取用户参数 你知道

嗨,我想用上面的表格,但是我得到了

__init__() takes at least 2 arguments (1 given)
我得到了它应该显示的表单,但它从未为我保存新密码

我还需要更改:

def __init__(self, user, *args, **kwargs):
    self.user = user
    super(AdminPasswordChangeForm, self).__init__(*args, **kwargs)
致:

因为它没有获取用户参数

你知道为什么吗

thx

========================================编辑=============================================

class set(FormView):
    model = User
    form_class = AdminPasswordChangeForm
    template_name = 'set.html'
    def dispatch(self, request, *args, **kwargs):
        return super(set, self).dispatch(request, *args, **kwargs) 

    def get_form_kwargs(self):
        kwargs = super(set, self).get_form_kwargs()
        kwargs['user_to_update'] = the user
        return kwargs
初始化:

def __init__(self, *args, **kwargs):
    self.user = kwargs['user_to_update']
    kwargs.pop('user_to_update')
    super(AdminPasswordChangeForm, self).__init__(*args, **kwargs)

使用现有表单。在视图的
get\u form\u kwargs
方法之外,将预期的参数传递给表单,而不是更改
\uuuuuu init\uuu
方法,这将破坏其他内容

为了保存密码,您需要覆盖
form\u valid
方法并调用
form.save()

对于创建和更新视图,您并不总是需要覆盖
form\u valid
,因为默认行为是保存表单并重定向。对于
FormView
,默认行为只是重定向,因此您必须重写它才能让它执行任何有用的操作

class SetPasswordView(FormView):
    form_class = AdminPasswordChangeForm
    template_name = 'set.html'
    success_url = '/thanks/'

    def get_form_kwargs(self):
        kwargs = super(set, self).get_form_kwargs()
        kwargs['user_to_update'] = the user
        return kwargs

    def form_valid(self, form):
        form.save()
        return super(SetPasswordView, self).form_valid(form)

请显示完整的回溯,以及一些代码来解释“并使用form_类调用它们”。为什么要从
\uuuu init\uuuu
方法中删除用户?如果表单无法访问该用户,则无法设置该用户的密码。从表单中删除该用户可修复即时错误,但无法修复该问题。表单需要用户。你可以向用户提供表单。表单如何知道应该更改哪个用户的密码,而不以某种方式将用户发送到表单中?我按照alasdair所说的做了,我保存了需要更改的用户,但没有保存方法…使用内置表单。要保存密码,必须在
form\u valid()
方法中调用
form.save()
(参见类似示例)。
class SetPasswordView(FormView):
    form_class = AdminPasswordChangeForm
    template_name = 'set.html'
    success_url = '/thanks/'

    def get_form_kwargs(self):
        kwargs = super(set, self).get_form_kwargs()
        kwargs['user_to_update'] = the user
        return kwargs

    def form_valid(self, form):
        form.save()
        return super(SetPasswordView, self).form_valid(form)