我试着使用上面的表格-但我得到
__init__() takes at least 2 arguments (1 given)
我得到了它应该显示的表单但是它没有保存新密码
我还需要改变:
def __init__(self, user, *args, **kwargs):
self.user = user
super(AdminPasswordChangeForm, self).__init__(*args, **kwargs)
:
def __init__(self, *args, **kwargs):
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
init :
def __init__(self, *args, **kwargs):
self.user = kwargs['user_to_update']
kwargs.pop('user_to_update')
super(AdminPasswordChangeForm, self).__init__(*args, **kwargs)
使用现有的表单。重写视图的get_form_kwargs
方法,将期望的参数传递给表单,而不是更改__init__
方法,这会破坏其他东西。
为了保存密码,需要重写form_valid
方法,调用form.save()
。
对于创建和更新视图,您并不总是需要重写form_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)