我有以下模型:
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)
?
答案 0 :(得分:0)
为将来提供帮助,正确的方法是:
models.CheckConstraint(
check=(~Q(personal_id__isnull=False, personal_id_type=0)),
name='personal_id_type_0__personal_id_isnotnull'
)