任何人都可以解釋這一點嗎?表單驗證方法會更新相關模型真的很不直觀。我明白它沒有提交到數據庫,但爲什麼即使修改內存中的模型?爲什麼不用form.save()呢?爲什麼form.is_valid()更新Django ModelForms的相關模型?
3
A
回答
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()
其實可以發生。
相關問題
- 1. Django - 爲什麼model屬性在`not form.is_valid()`時更新?
- 2. 模型相關的FileField Django的REST框架更新
- 3. Django中的Form.is_valid
- 4. Django的相關模型和更新視圖領域
- 5. Django的更新視圖與相關模型
- 6. ASP.Net MVC3更新相關的模型
- 7. 更新相關模型中的auto_now DateTimeField
- 8. 更新刪除相關模型屬性
- 9. 相關型號模型現場更新更新
- 10. Django的,從模型更新
- 11. Django的查詢與相關模型
- 12. 相關領域的Django模型驗證
- 13. 定義相關的Django模型域
- 14. 爲什麼laravel不會觸發相關的模型事件?
- 15. 更新相關的「最新」的模式
- 16. Django:爲相關模型使用用戶模型或配置文件模型
- 17. Django按照最新相關模型創建的管理命令
- 18. Django:從相關的一組模型中獲取相關集
- 19. 使用Django窗體更新Django模型
- 20. Laravel雄辯:存儲與相關的新模型的新模型
- 21. 爲什麼創建新產品模型時會調用「更新」?
- 22. Django相關模型無法解析
- 23. 通過相關模型篩選django
- 24. Django獲取與多個模型相關
- 25. Django模型 - 選擇相關計數
- 26. Django模型相關字段集
- 27. 顯示多個相關Django模型
- 28. 在Django中訪問相關模型?
- 29. Django Meta unique_together與相關模型ManyToOne?
- 30. Django模型 - 相關對象驗證