這裏是我做的方式:你會如何在Django中創建一個動態的formset?
{{ 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製造商究竟希望我們做什麼?爲什麼他們有這個隱藏字段,他們可能剛剛使用了一個像<input name="my_form_field[0]" />
這樣的數組,然後計算它的長度呢?
但是,你爲什麼要混合django模板和JavaScript? – Prashanth 2010-03-01 04:38:37
以便我可以處理它。否則,我必須在視圖中完全自定義表單處理。 Django似乎鼓勵這種方法,那就是*爲什麼*他們提供了這個'empty_form'和'__prefix__',以便你可以替換它。 – mpen 2010-03-01 06:36:02
我喜歡'.empty_form'的用法 - 很好,很短。謝謝! – 2011-05-24 01:09:26