带有 ModelForm 和 ModelFormSet 的 Django WizardView(这个不渲染)

Posted

技术标签:

【中文标题】带有 ModelForm 和 ModelFormSet 的 Django WizardView(这个不渲染)【英文标题】:Django WizardView with both ModelForm and ModelFormSet (this one not rendering) 【发布时间】:2012-10-03 20:31:33 【问题描述】:

我正在尝试创建一个 FormWizard,以便用户只输入一次“日期”(在第 1 步中),然后(在第 2 步中)输入一些带有相关金额的名称。 对于每个“名称”和关联的“金额”,我想保存一个模型实例(字段:日期、名称、金额)。

对于第 2 步,我尝试使用 FormSet,但向导视图根本不呈现任何字段。它只显示“第 2 步,共 2 步”和一个提交按钮。

# In forms.py

class FormForDate(forms.Form):
'''Only for date'''

    date = forms.DateField(initial = datetime.date.today()) 

class AccountaModelForm(ModelForm):

    class Meta:
        model = Account #model has 3 field: name, date, amount
        exclude = ['date']

class AccountsFormSet(forms.Form):

    amount_formset = modelformset_factory(Account, form=AccountaModelForm, extra=10, exclude=('date'))
    amount_s_formset = amount_formset(queryset=Account.objects.none(),)

在 urls.py(以及其他)中:

url(r'^form/$', AccountMultiple.as_view([FormForDate, AccountsFormSet]))

在views.py中

class AccountMultiple(SessionWizardView):

    def done(self, form_list, **kwargs):

        for form in form_list:
            print form #I am just doing something

        return render_to_response('app/formset.html', 
            'form': [form.cleaned_data for form in form_list],
        )

我在这段代码中做错了吗? 还是模板有问题(我使用了 Django 文档中的那个:here) 还是我错过了第三种可能性?

【问题讨论】:

【参考方案1】:

有多个问题:

您的 AccountsFormSet 似乎不是模型形式集,因为它源自 Form

WizardView.done() 方法在最后一步提交且表单有效时调用。所以渲染formset可能不是你想要的。

您需要为步骤 2 指定不同的模板以正确呈现表单集。

【讨论】:

以上是关于带有 ModelForm 和 ModelFormSet 的 Django WizardView(这个不渲染)的主要内容,如果未能解决你的问题,请参考以下文章

显示 ModelForms 的 django 表单验证错误

django ModelForms - 我做对了吗?

如何使用 FileFields 限制 ModelForms 文件上传的文件类型?

ModelForm 上的 Django 和字段集

在 ModelForms 中继承 formfield_callback 的 Django 问题

在 ModelForms 中继承 formfield_callback 的 Django 问题