我有一個顯示多個Formset的頁面,每個Formset都有一個前綴。表單集使用默認選項formset_factory
創建,包括extra=1
。可以使用JavaScript添加或刪除行。Django formset - 僅當沒有初始數據集時才顯示額外字段?
如果用戶正在添加新數據,則會出現一個空白行。完善。
如果用戶已經添加了數據但表單驗證失敗,在這種情況下,表單集使用了MyFormset(data, prefix='o1-formsetname')
等POST數據,只有他們輸入的數據才顯示出來。再次,完美。 (o1
等動態生成,每個o
對應一個「選項」,每個「選項」可能有多個表單集)。
但是,如果用戶正在編輯現有的數據,在這種情況下,鑑於填充使用MyFormset(initial=somedata, prefix='o1-formsetname')
其中somedata
是從數據庫中的一個模型來的數據的類型的字典列表中的表單集,一個額外的空白行該數據之後插入。除非用戶使用JavaScript明確添加一行,否則不需要顯示空白行。
是否有任何簡單的方法來防止formset顯示額外的行,如果初始數據設置?我在第三個例子中使用initial
的原因是,如果我剛剛使用MyFormset(somedata, prefix='o1-formsetname')
來傳遞數據,則必須將所有數據重新格式化爲包含每個字段的前綴的POSTdata樣式字典,例如o1-formsetname-1-price: x
以及計算管理形式的數據,這增加了整個負荷的複雜性。
一種解決方案可能是攔截表單集,然後再將其發送到模板,並手動刪除該行,但extra_forms
屬性似乎沒有可寫的,並設置extra
到0
沒有任何區別。我也可以讓JavaScript檢測這種情況並刪除該行。然而,我不禁想到我錯過了一些明顯的事情,因爲我想要的行爲是對我來說似乎是合理的預期行爲。
謝謝。
我使用Django 1.1,其中'max_num'參數的行爲不同;見下面的回覆。 – garybryan