我有一个模型,我需要创建包含多个实例的表单。更具体一点:我需要在常规表单中将我的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"/>
答案 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。