Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django中将paren添加到CheckConstraint_Django_Postgresql - Fatal编程技术网

如何在Django中将paren添加到CheckConstraint

如何在Django中将paren添加到CheckConstraint,django,postgresql,Django,Postgresql,以下约束条件: models.CheckConstraint(name='approved_by_someone', check=(models.Q(approved_at__isnull=True) | (models.Q(approved_by__isnull=False)

以下约束条件:

        models.CheckConstraint(name='approved_by_someone',
                               check=(models.Q(approved_at__isnull=True)
                                      | (models.Q(approved_by__isnull=False)
                                         & models.Q(approved_at__isnull=False))))
生成如下所示的postgres约束:

Check constraints:
"approved_by_someone" CHECK (approved_at IS NULL OR approved_by_id IS NOT NULL AND approved_at IS NOT NULL)
当转换为sql约束时,python代码中的参数将消失。我的第一个想法是,好吧,我可以通过添加一个模型将它们放回原处。Q关于和条件:

        models.CheckConstraint(name='approved_by_someone',
                               check=(models.Q(approved_at__isnull=True)
                                      | models.Q(models.Q(approved_by__isnull=False)
                                                 & models.Q(approved_at__isnull=False))))

但是,没有任何约束是不变的。

@willem van onsem是正确的,优先顺序使上述内容正确无需排列。他还正确地认为,拥有帕伦夫妇有利于人类的精神状态:——)


所以我猜你需要
models.Q
围绕表达式,表达式需要paren在SQL中实际获取它们。

不,括号只是Python文件的一部分,所以可以说,在解析之后,它们甚至不再可用。ORM显然不认为这些是必要的。
优先于
,因此它的书写方式是正确的:尽管我同意让它更明确可能更好。