est ici la façon dont je le fais:Comment créer un formset dynamique dans Django?
{{ formset.management_form }}
<table>
{% for form in formset.forms %}
{{ form }}
{% endfor %}
</table>
<a href="javascript:void(0)" id="add_form">Add Form</a>
Et voici 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);
});
Ce qui me dérange plus particulièrement est que je devais écrire moi-même tag modèle escapejs
. Il supprime juste toutes les nouvelles lignes et échappe à toutes les guillemets simples afin qu'il ne gâche pas ma chaîne. Mais qu'est-ce que les fabricants de Django attendaient exactement de nous dans cette situation? Et pourquoi ont-ils ce champ caché TOTAL_FORMS
, alors qu'ils auraient pu simplement utiliser un tableau comme <input name="my_form_field[0]" />
et ensuite compté sa longueur à la place?
Mais pourquoi mélangez-vous le modèle django et le javascript? – Prashanth
Pour que je puisse le traiter. Sinon, je dois aussi écrire complètement la gestion des formulaires personnalisés dans la vue. Et Django semble encourager cette méthode, c'est * pourquoi * ils ont fourni ce 'empty_form' avec' __prefix__' pour que vous puissiez le remplacer, supposément. – mpen
J'aime l'utilisation de '.empty_form' - agréable et court. Merci! –