如何在Django中用一个提交按钮提交多个表单?
我已经成功使用modelformset_factory创建了我需要的表单。
avaluos = Avaluo.objects.filter(Estatus__contains='CONCLUIDO',Factura__isnull=True)
FacturaFormset = modelformset_factory(Avaluo,form=FacturaForm,extra=0)
现在,这个方法为每一行生成了以下的HTML代码:
<form id="id-FacturaForm" class="blueForms" method="post">[..]</form>
<form id="id-FacturaForm" class="blueForms" method="post">[..]</form>
<form id="id-FacturaForm" class="blueForms" method="post">[..]</form>
我想用一个提交按钮来提交所有的表单。
有没有什么好主意?
更新
我最后使用了django-crispy-forms,这个工具让我能够为每一行生成输入框,然后我只是手动添加了表单和提交按钮。
self.helper.form_tag = False
{{example_formset.management_form }}
{% for a,b in olist %}
{{ b.id }}
<tr>
<td style="width:10px;"> {% crispy b %} </td>
<td> {{a.id}} </td>
</tr>
{% endfor %}
3 个回答
0
如果你想创建很多看起来“相同”的表单,也就是说它们的样子都一样,就像是属于一个大元素的多个小元素,你其实不需要为每个表单组都创建一个表单标签。
如果我没理解错的话,你是想为一个单独的 avaluo 对象编辑很多 facturas,对吗?这样的话,你可以用一个“avaluo”表单来表示,里面包含多个内联表单组,每个表单组对应一个“factura”。
你可以看看这个 内联表单组工厂,而不是使用模型表单组工厂。
0
我觉得你可能需要用Ajax来实现这个功能。否则,一旦提交了一个表单,你就无法再返回去处理其他表单了。
有一些jQuery的表单库可以让这个过程变得相对简单。例如,http://malsup.com/jquery/form/。
它的样子大概是这样的:
$('#button-id').click(function() {
$('.blueForms').ajaxSubmit();
});
当然,你还需要处理错误情况,并确保所有表单都已经提交完毕。
10
想了解更多关于 模型表单集 的内容吗?其实你不需要在页面上使用多个 form
标签,这正是使用表单集的目的所在。
<form method="post" action="">
{{ factura_formset.management_form }}
<table>
{% for form in factura_formset %}
{{ form }}
{% endfor %}
</table>
</form>
另外,每当你在一个页面上多次使用 id
属性时……世界上的某个开发者就会为此感到心痛,晚上睡不着觉。