我有以下模型:
Contact(models.Model):
personal_id = models.CharField()
personal_id_type = models.SmallIntegerField()我想要应用一个CheckConstraint,确保在personal_id不是null和personal_id_type = 0的情况下抛出IntegrityError。
在伪代码中:
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)
发布于 2020-07-09 18:19:55
为了帮助那些未来的人,正确的方法是:
models.CheckConstraint(
check=(~Q(personal_id__isnull=False, personal_id_type=0)),
name='personal_id_type_0__personal_id_isnotnull'
)https://stackoverflow.com/questions/62805221
复制相似问题