我正在尝试使用 WizardView 将数据从我的视图传递到我的表单类。
没有 WizardView,我使用
get_forms_kwargs()
执行此操作,如下所示:
def get_form_kwargs(self):
kwargs = super(MenuAdd, self).get_form_kwargs()
kwargs.update({'month': self.kwargs['month']})
return kwargs
在我的表单类中我使用:
def __init__(self, *args, **kwargs):
self.month = kwargs.pop('month', None)
一切都好 - 我可以使用“月”进行验证,例如
clean()
。
当我使用 WizardView 时,我按照
docs: 指定
get_forms_kwargs()
中的步骤,如下所示
def get_form_kwargs(self, step=0):
kwargs = super(MenuAddWizard, self).get_form_kwargs()
kwargs.update({'month': self.kwargs['month']})
return kwargs
我的
get_form()
不喜欢这个:
File "python312\Lib\site-packages\formtools\wizard\views.py", line 311, in post
return self.render_next_step(form)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "python312\Lib\site-packages\formtools\wizard\views.py", line 322, in render_next_step
new_form = self.get_form(
^^^^^^^^^^^^^^
File "myproject\views.py", line 1614, in get_form
form = super().get_form(step, data, files)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "python312\Lib\site-packages\formtools\wizard\views.py", line 432, in get_form
return form_class(**kwargs)
^^^^^^^^^^^^^^^^^^^^
TypeError: BaseFormSet.__init__() got an unexpected keyword argument 'month'
知道如何使用 Django 表单向导正确地将 kwargs (或任何其他方式)传递到表单吗?
你似乎使用了
FormSet
,可能是用你的形式制作的。然后你需要通过 form_kwargs=…
参数[Django-doc]传递值,所以:
def get_form_kwargs(self, *args, **kwargs):
result = super().get_form_kwargs(*args, **kwargs)
result.update(form_kwargs={'month': self.kwargs['month']})
return result
或者也许更简单:
def get_form_kwargs(self, *args, **kwargs):
return {
**super().get_form_kwargs(*args, **kwargs),
'form_kwargs': {'month': self.kwargs['month']},
}
注意:自 PEP-3135 [pep] 起,如果第一个参数是定义方法的类,第二个参数是方法,则无需带参数调用
函数的第一个参数(通常为super(…)
)。self