Django formwizard 与表单集和表单在同一页面上

Posted

技术标签:

【中文标题】Django formwizard 与表单集和表单在同一页面上【英文标题】:Django formwizard with formsets and forms on same page 【发布时间】:2012-08-17 10:34:57 【问题描述】:

我正在使用 Django 1.4 FormWizard(特别是 NamedUrlFormWizard)

首先,基础知识。我正在构建一个 3 步表单向导。最终的结果是定义一个模板,然后选择一些人来使用它,然后给他们发送一封电子邮件。

第 1 步 - 输入基本模板数据(名称、描述等) 第 2 步 - 定义一个包含 N 个字段的列表,每个字段都有自己的属性集,但结构完全相同 第 3 步 - 选择一个或多个用户发送电子邮件,并在保存前自定义此电子邮件的内容

到目前为止,在表单向导中:

第 1 步是一个标准的 Form 类,工作正常。 第 2 步是一个标准的 Formset 类,工作正常。 第 3 步给我带来了一些麻烦。它需要是一个表单集(电子邮件地址列表),还需要一个带有电子邮件文本的附加表单输入字段。我不知道如何在表单向导的同一页面上同时拥有一个表单集和一个非重复表单输入。

在一个完美的世界中,我可以将 Formset 定义为 Form 定义中的另一个表单字段。 即:

class EmailAddressForm(forms.Form):
    email = forms.EmailField()

class EmailAddressesAndText(forms.Form):
    emailText = forms.Textarea()
    emailAddressFormSet = formset_factory(EmailAddressForm, etc etc)

然后将我的 FormWizard 页面指向“EmailAddressesAndText”并完成它。但它不是一个完美的世界。关于如何实现这一目标的任何想法?

【问题讨论】:

【参考方案1】:

您可以使用WizardViewget_form() 方法自定义特定步骤的表单。参考:WizardView.get_form。 This answer can help you to add a field

另一种选择是在表单集中添加字段,并通过 JS 禁用和隐藏除第一个以外的所有实例。

【讨论】:

文档已移动(以及代码)django-formwizard.readthedocs.io/en/latest/gettingstarted.html

以上是关于Django formwizard 与表单集和表单在同一页面上的主要内容,如果未能解决你的问题,请参考以下文章

Django FormWizard - 如何根据上一步动态创建表单集

django manytomany 字段使用 through 和 formwizard

Django formwizard - 无法从步骤 1 到步骤 2 获取数据

Django 的 FormWizard 中的空 ModelFormset

Django:在表单向导中为步骤动态设置表单集

已解决:如何在 Django 中的表单错误中重新显示带有选定值的表单集和 Select2 字段