gpt4 book ai didi

python - 如何将参数传递给 Django 的 PasswordChangeForm 的 __init__ 函数

转载 作者:行者123 更新时间:2023-11-28 21:52:25 26 4
gpt4 key购买 nike

尝试在 Django 中访问我的 PasswordChangeView 时出现类型错误。错误是:

Django Version: 1.7.3
Exception Type: TypeError
Exception Value:
__init__() missing 1 required positional argument: 'user'
Exception Location: /usr/local/lib/python3.4/dist-packages/django/views/generic/edit.py in get_form, line 45
Python Executable: /usr/bin/python3.4

我无法找到 FormView 从 https://docs.djangoproject.com/en/1.7/_modules/django/contrib/auth/forms/#PasswordChangeForm 加载提供的 PasswordChangeForm 的示例

这就是我尝试这样做的方式,但即使经过一些调整后仍然遇到错误。

urls.py

url(r'^password/change/$', login_required(views.PasswordChangeView.as_view()), name='change_password'),

views.py

class PasswordChangeView(FormView):
template_name = 'change_password.html'
form_class = PasswordChangeForm

def dispatch(self, request, *args, **kwargs):
try:
self.initial['user'] = self.request.user
except AttributeError:
raise Http404

return super(PasswordChangeView, self).dispatch(request, *args, **kwargs)

我不确定为什么我仍然收到此错误。如果我查看使用 FormView 扩展的 FormMixin,我会看到以下内容:

def get_form(self, form_class):
"""
Returns an instance of the form to be used in this view.
"""
return form_class(**self.get_form_kwargs())

def get_form_kwargs(self):
"""
Returns the keyword arguments for instantiating the form.
"""
kwargs = {
'initial': self.get_initial(),
'prefix': self.get_prefix(),
}

if self.request.method in ('POST', 'PUT'):
kwargs.update({
'data': self.request.POST,
'files': self.request.FILES,
})
return kwargs

和...

def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
return self.initial.copy()

来源:https://github.com/django/django/blob/master/django/views/generic/edit.py

我通过调用 self.get_form_kwargs() 确认 self.initial 包含用户:

{'initial': {'user': <SimpleLazyObject: <User: maaack>>}, 'prefix': None}

我还应该如何将用户传递到表单中?

最佳答案

您应该将用户作为第一个参数传递给表单构造函数。看SetPasswordForm.__init__() :

def get_form(self, form_class):
return form_class(self.request.user, **self.get_form_kwargs())

PasswordChangeForm 中没有user 字段,因此initial 中的user 键无用。

关于python - 如何将参数传递给 Django 的 PasswordChangeForm 的 __init__ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28335050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com