2013-05-15 25 views
0

ModelForms是防止重複創建模型定義的好方法。我想要做的就是利用該功能,並且不僅僅用於處理POST請求。我使用表單進行驗證。django中的ModelForms僅用於發佈嗎?

例子:

假設你有一個字段(電子郵件,密碼,名字,姓氏)的用戶模型。電子郵件字段是唯一的索引。

UserCreationForm:使用所有字段,如果電子郵件已存在則驗證失敗。處理POST請求 UserUpdateForm:相同的模型,但不允許更改電子郵件。因爲這個領域被排除在那裏沒有問題。 UserAuthenticationForm:只包含電子郵件和密碼字段。問題是,這應該用於認證和驗證失敗,因爲電子郵件已經存在。

有沒有一種方法可以做到這一點?也就是說,讓UserAuthenticationForm跳過電子郵件檢查。

謝謝。

+0

這將是一個非常奇怪的調整,可能會影響您的代碼後,編碼認證的形式並不難。你會更好地遵循編程原則*關注點分離* http://en.wikipedia.org/wiki/Separation_of_concerns,並讓軟件的每個部分都集中在自己的目標上。 –

+0

嗯..我不認爲邏輯分離是問題。這個表格正在做一些非常有用的東西。 –

+0

我在評論中的含義與你在答案中的含義相同。您有用於創建/更新對象的表單,請勿將其用於日誌用戶。只用它來創建它。 –

回答

0

ModelForms用於創建/更新對象。身份驗證不會修改模型實例(User),因此請使用正常形式。

從文檔:

的保存()方法

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

如果你不打算使用這種save(),方法和你不最需要的模型字段或者(僅用戶名/電子郵件和密碼),你會被扔大部分由提供的功能遠ModelForm,那麼爲什麼你會首先使用它?

+0

我同意你的回答,但我認爲他不打算使用'safe',只是'驗證。 –

+0

你是對的!那麼我會跳過驗證部分。 –

+0

但是,如何使用它來更新對象?它仍然說電子郵件已經存在。 –

相關問題