我需要一种在模型级别创建验证器或约束的方法,以评估两个或多个字段,仅当它们同时为
null
/空白时才能够为 null
/空白。
例如,在下一个模型中:
from django.db import models
class Example(models.Model):
A = models.CharField(max_length=16, blank=True)
B = models.DateField(null=True, blank=True)
C = models.FileField(uploadto='/', null=True)
如果我尝试使用
Example
或 B
值创建一个新的 C
为空,它应该会引发 ValidationError
;但如果两者都是空的话应该没问题。
CheckConstraint
:
from django.db.models import CheckConstraint, Q
class Example(models.Model):
...
class Meta:
constraints = [
CheckConstraint(
check=(
(Q(A__isnull=True) & Q(B__isnull=True))
| Q(A__isnull=False) | Q(B__isnull=False)
),
name="a_b_null_check",
)
]