Aquí es la forma en que lo estoy haciendo:¿Cómo harías un formset dinámico en Django?
{{ formset.management_form }}
<table>
{% for form in formset.forms %}
{{ form }}
{% endfor %}
</table>
<a href="javascript:void(0)" id="add_form">Add Form</a>
y aquí está la JS:
var form_count = {{formset.total_form_count}};
$('#add_form').click(function() {
form_count++;
var form = '{{formset.empty_form|escapejs}}'.replace(/__prefix__/g, form_count);
$('#forms').append(form)
$('#id_form-TOTAL_FORMS').val(form_count);
});
Lo que me molesta específicamente es que tuve que escribir que escapejs
etiqueta plantilla mí mismo. Simplemente elimina todas las líneas nuevas y escapa de cualquier comilla simple para que no estropee mi cadena. Pero, ¿qué esperaban exactamente los fabricantes de Django que hiciéramos en esta situación? ¿Y por qué tienen este campo oculto TOTAL_FORMS
, cuando podrían haber usado una matriz como <input name="my_form_field[0]" />
y luego haber contado su longitud?
¿Pero por qué estás mezclando plantilla de django y javascript? – Prashanth
Para que pueda procesarlo. De lo contrario, tengo que escribir el manejo de formularios completamente personalizado en la vista también. Y Django parece alentar este método, es por eso * que proporcionaron este 'empty_form' con' __prefix__' para que puedas reemplazarlo, supuestamente. – mpen
Me gusta el uso de '.empty_form' - bueno y corto. ¡Gracias! –