我有一个包含一个formset的编辑对象视图(如果这很重要的话,一个或多个),现在我想创建一个可以显示多个编辑对象表单并以单一形式提交的页面。
完成此任务的正确方法是什么?
答案 0 :(得分:4)
我找到了解决方案。
我可以在编辑页面上枚举我的对象,并根据这些索引为表单集使用不同的前缀。这是一个例子:
首先,您需要枚举,我使用相同的输入(复选框)名称和增量值来实现它:
<input type="checkbox" name="counter" value="0">
...
<input type="checkbox" name="counter" value="1">
...
计数器编号是formset和其他数据序列号:
<!--Ordinary inputs-->
<input type="text" name="data0" value="value0">
<input type="text" name="data1" value="value1">
<!--Formsets-->
<input type="text" id="test0-0-data" name="test0-0-data" value="something">
<input type="text" id="test0-1-data" name="test0-1-data" value="something">
<input type="hidden" name="test0-TOTAL_FORMS" id="id_test0-TOTAL_FORMS" value="2">
<input type="hidden" name="test0-INITIAL_FORMS" id="id_test0-INITIAL_FORMS" value="0">
<input type="text" id="test1-0-data" name="test1-0-data" value="something">
<input type="hidden" name="test1-TOTAL_FORMS" id="id_test1-TOTAL_FORMS" value="1">
<input type="hidden" name="test1-INITIAL_FORMS" id="id_test1-INITIAL_FORMS" value="0">
然后,如果代码填充这样的formset:
counter = request.POST.getlist('counter')
for i in counter:
TestFormset = modelformset_factory(Test, form=TestForm)
test_formset = TestFormset(request.POST, prefix='test'+i, queryset=Test.objects.none())
我用JavaScript实现了上面的HTML结构。