我正在尝试让 django-formwizard 使用第一个表单中用户输入动态生成的表单集。 表单渲染和初始数据显示正常,但是当我尝试提交第二个表单时,我没有错误地返回它,并且我没有继续使用
done()
方法。
我的表格:
class MenuInputForm(forms.Form):
content = forms.CharField()
class DayMenuForm(forms.Form):
menu = forms.CharField()
DayMenuFormSet = formset_factory(form=DayMenuForm, min_num=1, extra=0)
我的看法:
class MenuAddWizard(LoginRequiredMixin, SessionWizardView):
# Either provide form_list as part of .as_view() in urls, or here.
# Note: DayMenuFormSet is overwritten in get_form()
form_list = [MenuInputForm, DayMenuFormSet]
template_name = "menu_add.html"
def get_form(self, step=None, data=None, files=None):
form = super().get_form(step, data, files)
# Determine the step if not given
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 menu'}, {'menu': 'This is some other example text'}])
form = formset
return form
def done(self, form_list, **kwargs):
# This code is never reached
pass
模板:
<form action="" method="post">{% csrf_token %}
<table>
{{ wizard.management_form }}
{% if wizard.form.forms %}
{{ wizard.form.management_form }}
{% for form in wizard.form.forms %}
{{ form.as_table }}
{% endfor %}
{% else %}
{{ wizard.form }}
{% endif %}
</table>
<input type="submit" value="Submit"/>
</form>
我做错了什么或忘记了什么?
是否可能只是
.done()
什么都不返回?通常,您应该渲染一个模板,或者更好的是,重定向到视图。