首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Q对象应用条件AND语句

如何使用Q对象应用条件AND语句
EN

Stack Overflow用户
提问于 2020-07-09 07:40:34
回答 1查看 36关注 0票数 0

我有以下模型:

代码语言:javascript
复制
Contact(models.Model):
    personal_id = models.CharField()
    personal_id_type = models.SmallIntegerField()

我想要应用一个CheckConstraint,确保在personal_id不是nullpersonal_id_type = 0的情况下抛出IntegrityError

在伪代码中:

代码语言:javascript
复制
if personal_id != None and personal_id_type == 0:
    fail

我尝试用下面的Q对象来实现这一点:

代码语言:javascript
复制
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检查

代码语言:javascript
复制
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)

EN

回答 1

Stack Overflow用户

发布于 2020-07-09 18:19:55

为了帮助那些未来的人,正确的方法是:

代码语言:javascript
复制
        models.CheckConstraint(
            check=(~Q(personal_id__isnull=False, personal_id_type=0)),
            name='personal_id_type_0__personal_id_isnotnull'
        )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62805221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档