如何在django中使用单个提交按钮提交多个表单?

时间:2013-02-27 23:25:53

标签: python django django-forms

我已经设法使用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 :(得分: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工厂。