2016-12-09 27 views
0

我不知道Django是否提供了一些其他Web框架(如Ruby on Rails)所具備的此功能。我說的手段來禁止某些國家,其中被保存的屬性的值,例如:Django模型:禁止具有特定值的狀態

model.active = False 
model.authorized = True 
model.save() # this should fail 

我們可以有一個model其中兩個activeauthorized或者都TrueFalse,但我們不能有任何其他組合。對不起,我現在想不出一個更好的例子,我希望這個意圖能被理解。

那麼,Django是否有辦法處理這些情況?或者在調用方法save時自己實現它是唯一的方法?

回答

0

您可以覆蓋模型上的保存方法。

class TestModel(models.Model): 
    def save(self, *args, **kwargs): 
     if self.active == False and self.authorized == True: 
      raise ValidationError("Some descriptive text here") 
     else: 
      return super(TestModel, self).save(*args, **kwargs) 

這是最簡單的方法,但不是最好的。

你也可以做模型驗證重寫clean方法,但隨後full_clean必須明確地調用save如果不通過ModelForm

第三種方法只適用於使用此之前,如果您使用的是形式接受被稱爲在這種情況下,您可以覆蓋上述clean,但模型的full_clean是窗體的clean方法在調用表單的is_valid方法時調用。

+1

並非所有視圖都能夠[處理驗證錯誤](http://stackoverflow.com/a/8771090/1324033)。清潔方法將是正確的方法 – Sayse

相關問題