Django模型:禁止具有特定值的状态

时间:2016-12-09 08:29:10

标签: django

我想知道Django是否提供了一些其他Web框架,如Ruby on Rails。我在谈论禁止保存属性值的某些状态的方法,例如:

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

我们可以model activeauthorized同时为TrueFalse,但我们不能有任何其他组合。抱歉,我现在想不出一个更好的例子,我希望能理解这个意图。

那么,Django有没有办法处理这些情况?或者在调用方法save时自己实现它是唯一的方法吗?

1 个答案:

答案 0 :(得分: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方法时调用方法。