2012-01-28 196 views
24

保存模型時執行一些操作,特別是從管理員。我利用幾個字段並檢查以確保其中一個字段或另一個字段被填充。我也創造了場地slu。。現在將這些分爲覆蓋乾淨和保存功能之間的區別。它現在可以工作,但我很好奇什麼時候使用它們。我瀏覽了文檔,並且找不到具體使用什麼時候。Django覆蓋模型清潔()vs保存()

回答

30

您應該使用clean來執行驗證相關的工作,並解析/更改/以其他方式清理輸入。資本化領域和產生slu can可能發生在這裏。我還使用clean來強制類似於post_type的字段在代理模型中具有特定的值。如果您清潔內部django.core.exceptions.ValidationError('error text')'error text'被添加到form.non_field_errors

保存是改變模型實際保存方式的地方。例如,我使用save來創建上傳圖片的裁剪。 ValidationError如果在這裏提出,則不會被捕獲,我覺得這是兩者之間最重要的實際區別。

+2

啊偷走了我的鍵盤的話。很好的答案。我唯一要添加的是鏈接到文檔的鏈接,其中有一個很好的引發了ValidationError的示例:https://docs.djangoproject.com/en/dev/ref/models/instances/#django .db.models.Model.clean – 2012-01-28 20:56:42

+4

不是django.forms.ValidationError,而是django.core.exceptions.ValidationError – benjaoming 2013-03-01 17:02:45

+0

好的。我想我只是總是從表單(從core.exceptions中導入它)導入它。更新答案。 – dokkaebi 2013-03-01 17:14:44