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

时间:2012-10-13 00:59:13

标签: django django-forms formset django-formwizard

我正在尝试创建一个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 个答案:

答案 0 :(得分:1)

有很多问题:

  • 您的AccountsFormSet似乎不是modelformset,因为它来自Form

  • 提交最后一步并且表单有效时,会调用
  • WizardView.done()方法。因此,渲染formset可能不是你想要的。

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