模型字段“一起为空或根本不为空”约束

问题描述 投票:0回答:1

我需要一种在模型级别创建验证器或约束的方法,以评估两个或多个字段,仅当它们同时为

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
;但如果两者都是空的话应该没问题。

django validation django-models check-constraints
1个回答
0
投票

您可以使用

CheckConstraint

from django.db.models import CheckConstraint, Q

class Example(models.Model):
    ...
    class Meta:
        constraints = [
            CheckConstraint(
                check=(
                    (Q(B__isnull=True) & Q(C__isnull=True))
                    | Q(B__isnull=False) | Q(C__isnull=False)
                ),
                name="b_c_null_check",
            )
        ]
© www.soinside.com 2019 - 2024. All rights reserved.