我已经设法使用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 %}
答案 0 :(得分:10)
了解更多model formsets。您不需要单独的form
标记,这是使用formset的重点。
<form method="post" action="">
{{ factura_formset.management_form }}
<table>
{% for form in factura_formset %}
{{ form }}
{% endfor %}
</table>
</form>
此外,每次在页面上多次使用id
属性时......开发人员都会哭着自己睡在世界的某个地方。
答案 1 :(得分:0)
我怀疑你需要使用Ajax来实现它 - 否则一旦提交了一个表单,你将无法采用其他方式。
有一些jQuery表单库应该使它相对简单。例如,http://malsup.com/jquery/form/。
看起来像是:
$('#button-id').click(function() {
$('.blueForms').ajaxSubmit();
});
当然,您需要处理错误处理并等待所有表单提交。
答案 2 :(得分:0)
如果您正在尝试创建“相同”形式的许多实例(也就是说,它们看起来都相同),就好像它是属于单个主元素的许多子项中的一个,您实际上并不需要为每个表单集创建一个表单标记。
如果我没弄错的话,你正在尝试为一个 avaluo 对象编辑许多 facturas 。我对吗?该表示形式将是一个单独的“avaluo”形式,具有许多内联形式集,每个“factura”一个。
查看inline formsets factory而不是modelformset工厂。