将Django formset渲染为数组

时间:2017-01-31 12:59:01

标签: django forms django-forms nested-forms formsets

我有一个模型,我需要创建包含多个实例的表单。更具体一点:我需要在常规表单中将我的ModelForm呈现在其字段名称旁边的方括号中。魔术世界里有类似的东西:

forms.py

class ManForm(ModelForm):
    class Meta:
        model = Man
        fields = ['name', 'age']

class PeopleForm(forms.Form):
    # modelless form
    people = ??? # array of ManForm instances or something

form.html

<form action="/people/create/">
    {{ form }}
</form>

输出

<form action="/people/create/">
    <input type="text" name="name[0]"/>
    <input type="text" name="age[0]"/>
</form>

说实话,我根本不知道如何处理这个问题。我试过了modelformset_factory,但我得到的只是<input type="text" name="form-0-name"/>

2 个答案:

答案 0 :(得分:1)

正如评论中所讨论的,您需要一个表单集。

def create_people(request):
    PeopleFormSet = modelformset_factory(Man, form=ManForm)
    if request.method == 'POST':
        formset = PeopleFormSet(request.POST)
        if formset.is_valid():
            for form in formset:
                ... do something with individual form
    else:
        formset = PeopleFormSet()
    return render(request, template_name, {'formset': formset}

答案 1 :(得分:0)

要在基于功能的视图中使用formset,请参阅@Daniel Roseman的回答或阅读here

对于基于类的视图,没有内置的通用视图。根据{{​​3}},他们决定让第三方包处理这个问题。您可以使用this ticket