我正在try 使用Wizard View将数据从我的视图传递到我的表单类.
如果没有Wizard View,我会使用get_forms_kwargs()
个来执行此操作,如下所示:
def get_form_kwargs(self):
kwargs = super(MenuAddWizard, self).get_form_kwargs()
kwargs.update({'month': self.kwargs['month']})
return kwargs
在我的表单类中我用途:
def __init__(self, *args, **kwargs):
self.month = kwargs.pop('month', None)
一切都很好-我可以使用"月"进行验证,例如clean()
.
但当我使用Wizard View时,我会按照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 Form Wizard将kwargs(或任何其他方式)正确传递到表单吗?
供参考,完整视图如下(不含get_forms_kwargs()
):
class MenuAddWizard(LoginRequiredMixin, SessionWizardView):
# Either provide form_list as part of .as_view() in urls, or here.
form_list = [MenuInputForm, DayMenuFormSet]
template_name = "menu_add.html"
def get_context_data(self, form, **kwargs):
context = super(MenuAddWizard, self).get_context_data(form=form, **kwargs)
month = self.kwargs['month']
context['month'] = month
return context
def get_form_kwargs(self):
kwargs = super(MenuAddWizard, self).get_form_kwargs()
kwargs.update({'month': self.kwargs['month']})
return kwargs
def get_form(self, step=None, data=None, files=None):
form = super().get_form(step, data, files)
if step is None:
step = self.steps.current
if step == '1':
step_0_cleaned_data = self.get_cleaned_data_for_step('0')
# Using step 0 data, I generate the list to be used for initial; removing logic for brevity and using two example items as test
DayMenuFormSet = formset_factory(form=DayMenuForm, extra=0)
formset = DayMenuFormSet(initial=[{'menu': 'Some example text'}, {'menu': 'This is another test...'}],
data=data)
form = formset
return form
我的表格都继承了标准forms.Form
.