2013-05-12 79 views
1

我認爲使用模型表單而不是常規表單(放棄modelform提供的所有簡單事情)會更容易。 但是當我嘗試這樣做:在Django中處理模型表單

>>> m = Model.objects.get(pk=1) 
>>> f = ModelForm(instance=m) 
>>> f.is_valid() 
False 
>>> f.save() 
AttributeError: 'ModelForm' objects has no attribute 'cleaned_data' 

我認爲Django的documentation是錯的說:

通過的ModelForm生產的每個表單也有一個save()方法。這個 方法創建並保存數據庫對象的數據綁定到 表單。 ModelForm的子類可以接受現有的 實例作爲關鍵字參數實例;如果提供了,則save() 將更新該實例。如果沒有提供,save()會創建一個 指定模型的新實例

原因這只是對我而言不起作用。

我說django文檔錯了嗎?

在此先感謝。

回答

5

您可能忘記根據用戶的請求將數據添加到ModelForm實例中。POST數據。

f = ModelForm(data=request.POST, instance=m) 
f.is_valid() # is True if the data is ok. 

在任何情況下,最好發佈您的相關代碼:模型類,模型表單類和您的視圖。

編輯:您必須添加data=參數(或第一個參數,如果你不命名),以一個ModelForm初始化,如果你想is_valid()工作。 is_valid在這裏是根據各種驗證規則來檢查給定的數據,並且只有在沒有問題的情況下才可以保存ModelForm。使用instance= named參數初始化ModelForm不會觸發任何驗證,因爲沒有什麼新的驗證。

+0

你知道,在這種情況下,使用ModelForm(無論,instance = m)還是ModelForm(data = whatever,instance = m)的結果是相同的。不過,我不能只更新一個字段,它說每個字段都是必需的,因此使is_valid返回False。但這一定與我的模型有關。 – 2013-05-12 18:29:50

+0

是的,我知道。您的代碼段只包含ModelForm初始化的「instance =」參數。另外:請在你的問題中包含更多相關的代碼。而且:在你提到的這一段中,Django文檔絕對沒有錯。 – mawimawi 2013-05-12 18:38:12