2016-04-13 31 views
0

假設我有models.py一個簡單的模型,旨在通過Django管理要編輯:在Django模型中重寫clean方法會打破其他驗證?

class Range(models.Model): 
    gt = models.IntegerField('Greater than') 
    lt = models.IntegerField('Lesser than') 

    def clean(self): 
     if self.gt >= self.lt: 
      raise ValidationError('Incorrect range') 

的問題:雖然上面的代碼做了偉大的工作,在保證假設gt較小比lt,它還打破了Django開箱即用的其他基本驗證。如果,例如,我輸入的Django管理這些領域的一些非數字數據,我呈現跨越幾個屏幕調試消息:

enter image description here

如果我從定義中刪除overrided clean(self)方法Range,這基本驗證再度開始正常工作:

enter image description here

當然不過,現在我可以用比lt更大gt進入Range秒。

我真的不知道我在做什麼錯了,因爲我雖然我只是按照Django文檔,按https://docs.djangoproject.com/en/1.9/ref/models/instances/#validating-objects

哪裏是我的錯?如何正確提供我的表單驗證?

回答

1

您可以運行父clean方法首先:

class Range(models.Model): 
    gt = models.IntegerField('Greater than') 
    lt = models.IntegerField('Lesser than') 

    def clean(self): 
     super(Range, self).clean() 

     if self.gt >= self.lt: 
      raise ValidationError('Incorrect range')