Django:如何在后端添加一个表单到有界formset?

时间:2014-04-04 05:22:45

标签: django django-forms

基本上,我想要做的是使用一个受限制的formset.POST,向其添加一个空白表单,然后返回新的formset。

class MyView(View):
    def post(self, request):
        MyFormSet = formset_factory(MyForm)
        posted_formset = MyFormSet(request.POST)

        # Append a blank form to posted_formset here
        return render(request, 'mytemplate.html', {'formset': posted_formset})

在Django 1.6中有没有干净的方法呢?现在,我有一个解决方法,涉及创建一个新的formset,initial设置为posted_formset中绑定的数据,但它有点笨重,我觉得应该做一个更容易的方法。

2 个答案:

答案 0 :(得分:0)

这可能是此问题的重复:Django: How to add an extra form to a formset after it has been constructed?

否则查看工厂函数的额外参数。您可以在Django Documentation

中获得有关formset的更多信息

答案 1 :(得分:0)

因此似乎没有干净的方法来执行此操作,因为在将formset绑定到QueryDict之后,传递给formset_factory的额外参数变得无关紧要。以下是我现在在视图中的表现:

class MyView(View):
    def post(self, request):
        MyFormSet = formset_factory(MyForm)
        posted_formset = MyFormSet(request.POST)

        initial = []
        for form in posted_formset:
            data = {}
            for field in form.fields:
                data[field] = form[field].value()
            initial.append(data)

        formset = AuthorFormSet(initial=initial)
        return render(request, 'mytemplate.html', {'formset': formset})

基本上,我将一个formset绑定到request.POST,然后迭代它并获取字段值并将它们放入一个dicts数组initial中,当我创建一个新的formset时,我会传入它们(参见<{3}})最后会有一个额外的空白表格,因为它没有绑定。

这适用于任何表单和formset。希望它可以帮到某人。