小编kav*_*dev的帖子

Django ORM:按数组过滤包含子查询中的 OuterRef 产生零结果

这是一个孤立的 ORM 查询:

Purpose.objects.annotate(
    conversation_count=SubqueryCount(
        Conversation.objects.filter(goal_slugs__contains=[OuterRef("slug")]).values("id")
    )
)
Run Code Online (Sandbox Code Playgroud)

其中 SubqueryCount 是:

from django.db.models import IntegerField
from django.db.models.expressions import Subquery


class SubqueryCount(Subquery):
    template = "(SELECT count(*) FROM (%(subquery)s) _count)"
    output_field = IntegerField()
Run Code Online (Sandbox Code Playgroud)

运行该查询时,将使用以下 sql(通过 djdt 解释):

SELECT
    "taxonomy_purpose"."id",
    "taxonomy_purpose"."slug",
    (
        SELECT count(*)
        FROM (
            SELECT U0."id"
            FROM "conversations_conversation" U0
            WHERE U0."goal_slugs" @> ARRAY['ResolvedOuterRef(slug)']::varchar(100)[]
        ) _count
    ) AS "conversation_count"
FROM "taxonomy_purpose"
Run Code Online (Sandbox Code Playgroud)

注意ResolvedOuterRef(slug)作为字符串注入到 ARRAY 查找中。我做错了什么,还是应该将此报告为错误?如果这是一个错误,是否有已知的解决方法(可能创建自定义 OuterRef 类)?

django django-orm

3
推荐指数
1
解决办法
538
查看次数

标签 统计

django ×1

django-orm ×1