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

时间:2012-08-22 02:49:16

标签: django django-forms django-1.4 django-formwizard

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

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

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

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

  • 第1步是标准的Form类,工作得很好。
  • 第2步是标准的Formset类,工作得很好。
  • 第3步给我带来了一些麻烦。它需要是一个formset(电子邮件地址列表),还有一个带有电子邮件文本的附加表单输入字段。我无法弄清楚除了表单向导内的同一页面上的非重复表单输入之外如何同时拥有一个表单集。

在一个完美的世界中,我可以将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 个答案:

答案 0 :(得分:0)

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

另一种选择是在formset中添加字段并通过JS禁用并隐藏除第一个之外的所有实例。