Moh*_*ail 12 django django-orm
我无法理解 django ORM 中的 OuterRef 到底是如何工作的。例如:
Table.objects.filter(field=OuterRef("pk"))
Run Code Online (Sandbox Code Playgroud)
这是什么意思?field和在这里扮演什么角色pk以及它如何影响最终的查询集?请有人详细说明一下。提前致谢。
需要理解的是,OuterRef 的行为取决于使用查询的上下文。
以你的例子为例:
Table.objects.filter(field=OuterRef("pk"))
Run Code Online (Sandbox Code Playgroud)
您可以将其理解为“过滤表Table中Table.field等于外部查询上下文主键的行”。
它本身并不能转化为完整的 SQL 查询,但它在 SQL 查询上下文中的含义如下:
SELECT pk, ... FROM ... WHERE ...(SELECT * FROM Table WHERE field = pk)
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
outer query this is the part that corresponds to
Table.objects.filter(field=OuterRef("pk"))
Run Code Online (Sandbox Code Playgroud)
通常,您将在处理行子集的上下文中使用它(Exists例如,使用像 之类的运算符),或者添加 alimit 1以便在与某些字段进行比较时使用单个结果。
在 Django ORM 中,您需要Table.objects.filter(field=OuterRef("pk"))[:1]获取子查询的单个结果。
| 归档时间: |
|
| 查看次数: |
3504 次 |
| 最近记录: |