2013-02-27 200 views
1

我已经设法使用modelformset_factory创建我需要的表单。如何使用django中的单个提交按钮提交多个表单?

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> 

我想用一个提交按钮提交的所有形式。

任何想法?

UPDATE

我结束了使用django-crispy-forms这让我GERATE输入的每一行,然后我就手动添加表格并提交。

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

http://stackoverflow.com/questions/2374224/django-working-with-multiple-forms这可以帮助吗? – GordonsBeard 2013-02-27 23:28:26

+1

具有相同ID的多个元素无效html一定会给您带来麻烦。 – Musa 2013-02-27 23:29:35

回答

0

我怀疑你需要使用Ajax来完成它 - 否则只要一个表单被提交,你将无法走另一条路。

有几个jQuery表单库应该使它相对简单。例如,http://malsup.com/jquery/form/

它看起来是这样的:

$('#button-id').click(function() { 
    $('.blueForms').ajaxSubmit(); 
}); 

当然,你则需要处理的错误处理,并等待所有的形式提交。

0

如果您尝试创建许多“相同”形式的实例(即它们看起来都是平等的),就好像它是属于单个主元素的许多子元素中的一个,但实际上并不实际需要为每个表单集创建一个表单标签。

如果我没有记错的话,你要编辑很多facturas单个avaluo对象。我对吗?该表示将是一个单独的“avalu”格式,包含许多内联表单,每个“factura”一个。

检出inline formsets factory而不是modelformset工厂。

+0

对不起,我再次阅读您的查询,我想我可能会倒退关系... – Mariano 2013-02-27 23:45:43

+0

是的,我试图编辑与每个_avaluo_匹配过滤器的_factura_字段。我最终使用了** modelformset_factory **和** django-cripy-forms **,而不是生成表单,我为每一行创建了输入,它像一个魅力一样工作。谢谢! – 2013-03-01 01:18:05

9

阅读更多model formsets。你不需要单独的form标签,这是使用formset的全部要点。

<form method="post" action=""> 
    {{ factura_formset.management_form }} 
    <table> 
     {% for form in factura_formset %} 
      {{ form }} 
     {% endfor %} 
    </table> 
</form> 

此外,每次使用id属性不止一次在页面上...开发商呼喊自己在世界的某个地方睡觉。

+7

对于'开发者来说,+1会让自己在世界某个地方睡觉。“ – Clayton 2014-03-10 12:30:21