2011-04-22 55 views

回答

3

我認爲原因是這樣的:

第一次調用is_valid()或 訪問 的ModelForm的錯誤屬性始終觸發形式 驗證,但作爲Django的1.2,它 也會觸發模型驗證。 這具有清潔 您傳遞給ModelForm 構造函數的模型的副作用。例如,在窗體上調用 is_valid()將您的模型上的任何日期字段轉換爲 實際日期對象。

here。從邏輯上講,這確實是有道理的。假設我有一個像這樣的模式:

class SomeModel(models.Model): 
    Somefield = models.CharField(unique=True) 

然後儘可能的的ModelForm而言,驗證領域TextInputField將適用於任何價值。然而,從模型的角度來看,沒有任何價值會做 - 這個價值必須是唯一的。

驗證機制描述爲here。基本上,在模型上調用full_clean會導致該模型根據OO範式檢查自己的字段。因此,出於這個原因,模型的內存映像可以更新並驗證它將檢查它是否可以真正寫入數據庫。

因此,它是有道理的,因爲你的後衛:

if form.is_valid(): 

真的應該確保:

form.save() 

其實可以發生。