これが私がやっている方法です:
{{ formset.management_form }}
<table>
{% for form in formset.forms %}
{{ form }}
{% endfor %}
</table>
<a href="javascript:void(0)" id="add_form">Add Form</a>
そして、ここに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);
});
特に気になるのは、そのescapejs
テンプレート タグを自分で書かなければならなかったことです。文字列を台無しにしないように、すべての改行を取り除き、一重引用符をエスケープするだけです。しかし、Django の作成者は、この状況で私たちが何をすることを正確に期待していたのでしょうか? そして、配列を使用して代わりにその長さを数えることができたのに、なぜこのTOTAL_FORMS
隠しフィールドがあるのでしょうか?<input name="my_form_field[0]" />