Hier ist die Art, wie ich es tue:Wie würden Sie in Django ein dynamisches Formset erstellen?
{{ formset.management_form }}
<table>
{% for form in formset.forms %}
{{ form }}
{% endfor %}
</table>
<a href="javascript:void(0)" id="add_form">Add Form</a>
Und hier ist die 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);
});
Was mich speziell, dass ich das escapejs
Vorlage mich Tag schreiben musste stört ist. Es entfernt nur alle Zeilenumbrüche und es werden alle einfachen Anführungszeichen entfernt, so dass es meine Zeichenfolge nicht durcheinanderbringt. Aber was genau haben die Django-Macher von uns in dieser Situation erwartet? Und warum haben sie dieses versteckte Feld TOTAL_FORMS
, wenn sie nur ein Array wie <input name="my_form_field[0]" />
hätten verwenden können und dann stattdessen ihre Länge gezählt hätten?
Aber warum mischen Sie Django Vorlage und Javascript? – Prashanth
Damit ich es verarbeiten kann. Ansonsten muss ich in der Ansicht auch komplett benutzerdefinierte Formularbearbeitung schreiben. Und Django scheint diese Methode zu unterstützen, das ist der Grund, warum sie diese "leere_Form" mit "__prefix__" versehen haben, so dass Sie sie angeblich ersetzen könnten. – mpen
Ich mag die Verwendung von '.empty_form' - nett und kurz. Vielen Dank! –