2012-06-26 52 views
1

是不是有一個原因,在Model.full_clean,對於clean_fields之前叫clean? 在我的項目,這將是比較合理的,如果我能先做我的驗證,以驗證隨後clean_fields的東西,像這樣的情況:爲什麼在Model.full_clean中clean_fields在clean之前調用?

class MyModel(models.Model): 
    status = models.IntegerField(blank=False, null=False) 

    def clean(self): 
     if not self.status: 
      self.status = 0 

將任何改變這一排序在full_clean問題?

回答

4

爲什麼它會「更合理」?正如其名稱所述,clean_fields旨在單獨清理每個字段,而clean的目的僅用於驗證字段交互。例如,只有在設置了另一個字段等情況下,一個字段纔可以爲空。首先調用clean_fields方法以確保您可以實際驗證這些交互;如果這些字段一般都有錯誤,那麼聯合驗證它們是毫無意義的。

+0

但是,如果您將字段聲明爲非空,它會在您運行'clean'來驗證字段交互之前引發異常。 – zVictor

+0

我編輯了這個問題,也許現在更清楚了。 – zVictor

+3

這不是乾淨的目的。如果你想提供一個默認值,使用'default' kwarg,例如'status = models.IntegerField(空白=假,空=假,默認= 0)' –

相關問題