您可以在Django中为模型指定一些约束,但是执行这些约束(例如在ORM中)非常困难。下面两种方法。
通过使用
.clean()
方法
通过重写
clean(..)
函数,但请注意,默认情况下-
在模型/ORM层实施,
Form
清洁(…)
函数,从而引发异常。
class MyModel(models.Model):
def clean(self):
a1 = self.age_from
a2 = self.age_to
if a1 is not None and a2 is not None and a1 > a2:
raise ValidationError('age_from should be less than or equal to age_to')
super().clean()
所以这检查如果两列都是非-
None
,那个
age_from
小于或等于
age_to
django-db-constraints
您还可以在数据库级别强制执行约束,因为您的数据库系统支持这一点,例如
django-db-constraints
[GitHub]
然后可以添加约束,如:
class MyModel(models.Model):
class Meta:
db_constraints = {
'age_check': 'CHECK (age_from IS NULL OR age_to IS NULL OR age_from <= age_to)',
}