使用 FormWizard 将信息从视图传递到表单

问题描述 投票:0回答:1

我正在尝试使用 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 (或任何其他方式)传递到表单吗?

django django-formwizard
1个回答
0
投票

你似乎使用了

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
)。

© www.soinside.com 2019 - 2024. All rights reserved.