0

我有一个模型,我需要在其中创建包含多个实例的表单。更具体地说:我需要在常规表单中呈现我的 ModelForm,并在其字段名称旁边使用方括号。在魔法世界中是这样的:

表格.py

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

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

表单.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"/>

4

2 回答 2

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}
于 2017-01-31T13:34:50.453 回答
0

要在基于函数的视图中使用表单集,请参阅@Daniel Roseman 的答案或在此处阅读。

对于基于类的视图,没有内置的通用视图。根据这张票,他们决定让第三方包处理这个问题。您可以为此使用django-extra-views

于 2017-01-31T13:39:58.697 回答