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

问题描述 投票:1回答:1

这里是一个隔离的ORM查询:

Purpose.objects.annotate(
    conversation_count=SubqueryCount(
        Conversation.objects.filter(goal_slugs__contains=[OuterRef("slug")]).values("id")
    )
)

其中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()

运行该查询时,使用以下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"

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

django django-orm
1个回答
0
投票

我没有您的模型或任何值,所以我无法检查我在说的是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.