2013-10-25 40 views
0

我正在使用formset,並試圖實現保存選項。 即:你在表單中輸入頁面形式的詳情,有兩個功能django表單is_valid和cleaned_data實現保存和提交行爲。

1)除

2)提交

對於保存 - >我想保存數據到數據庫中,而不驗證[而不管用戶輸入的是否爲必填字段]

用於提交 - >確認並保存到數據庫中。

對於提交,我沒有問題。

但對於節省:

for form in formset.form: 
    1) Validate the form form.is_validate() -> Just invoking. 
    2) get the cleaned_data 

在下面的方法,

1)不cleaned_data僅當is_valid()是真的嗎?

2)我們是否有其他方法來實現?

您的幫助將非常感激。

回答

0

1)只有當is_valid()爲真時,clean_data纔可用?

是的。它僅在表單有效時纔可用。

2)我們有沒有其他方法可以達到同樣的效果?

我不認爲你可以在同一個表中保存這樣的數據在DB中。但是,您可以將它保存在會話(cookie)中。您可以序列化表單(或提交的POST數據)並將其保存爲會話中的JSON。

要顯示先前保存的表單,您可以檢索此數據並將其作爲initial_data傳遞給表單或表單集。

+0

這意味着從表單到數據庫的部分信息存儲是噩夢?從文檔「更改Django 1.5。 Django用於在表單中存在任何錯誤的情況下完全刪除cleaned_data屬性。自1.5版本以來,即使表單未驗證,但存在clean_data但僅包含字段值這確實證實了。「 – Whoami

+0

我試圖fields.required = False之前我保存form.save(),但它仍然會引發驗證錯誤。 – Whoami

+0

@Whoami,我錯過了1.5的變化。但是,即使存在某些屬性,如果任何必需的屬性不存在或者存在其他一些錯誤(如完整性錯誤等),則可能無法將該對象保存在數據庫中。最佳方式是將此類數據作爲JSON存儲在單獨的表中或會話)並在您想要恢復時使用它。 – Rohan