У меня следующая модель:
Contact(models.Model):
personal_id = models.CharField()
personal_id_type = models.SmallIntegerField()
Я хочу применить CheckConstraint
, который гарантирует, что IntegrityError
выбрасывается, если personal_id
НЕ null
И personal_id_type = 0
.
В псевдокоде:
if personal_id != None and personal_id_type == 0:
fail
Я пытался добиться этого с помощью следующих объектов Q:
class Meta:
constraints = [
models.CheckConstraint(check=~Q(personal_id__isnull=False) &
~Q(personal_id_type=0),
name='personal_id_type_0__personal_id_isnotnull')
]
Однако это приводит к следующему: SQL проверка
NOT personal_id IS NOT NULL AND NOT (personal_id_type = 0 AND personal_id_type IS NOT NULL)
Как мне изменить это на просто NOT (personal_id_type = 0 AND personal_id_type IS NOT NULL)
?