2016-12-09 24 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

相关问题