【问题标题】:Django model: forbid states with particular valuesDjango模型:禁止具有特定值的状态
【发布时间】:2017-04-24 16:17:36
【问题描述】:

我想知道 Django 是否提供此功能,其他一些 Web 框架(例如 Ruby on Rails)是否提供。我说的是禁止保存属性值的某些状态的方法,例如:

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

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

那么,Django 有什么方法可以处理这些情况吗?还是只有调用save方法时自己实现?

【问题讨论】:

    标签: django


    【解决方案1】:

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

    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 方法进行模型验证,但如果不通过ModelForm 使用此方法,则必须在调用保存之前显式调用full_clean

    第三种方法仅在您使用表单接受更改时适用,在这种情况下您可以像上面那样覆盖clean,但是模型的full_clean是表单的clean方法,当表单的is_valid 方法被调用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2021-01-29
    • 2011-12-09
    相关资源
    最近更新 更多