我想知道Django是否提供了一些其他Web框架,如Ruby on Rails。我在谈论禁止保存属性值的某些状态的方法,例如:
model.active = False
model.authorized = True
model.save() # this should fail
我们可以model
active
和authorized
同时为True
或False
,但我们不能有任何其他组合。抱歉,我现在想不出一个更好的例子,我希望能理解这个意图。
那么,Django有没有办法处理这些情况?或者在调用方法save
时自己实现它是唯一的方法吗?
答案 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
ModelForm
第三种方法仅适用于您使用表单接受更改的情况,在这种情况下,您可以覆盖上面的clean
,但模型的full_clean
是表单的clean
调用表单的is_valid
方法时调用方法。