首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:此查询集包含对外部查询的引用,只能在子查询中使用

ValueError:此查询集包含对外部查询的引用,只能在子查询中使用
EN

Stack Overflow用户
提问于 2022-09-29 00:10:56
回答 2查看 56关注 0票数 0

我有经纪人客户和汽车模型。

在客户机模型中:agent = ForeignKey('Agent'...)

汽车模型:client = ForeignKey('Client'...)

我想注释(在代理QuerySet上)代理的所有客户端的活动汽车总数。

因此,如果代理Bob有客户Alice和Peter,Alice有3个活动汽车,Peter有2个活动汽车,那么active_cars变量将是5。

我试过:

代码语言:javascript
复制
Agent.objects.annotate(
    active_cars=Subquery(
        Car.objects.all().active().filter(
            client__agent=OuterRef('pk')
        ).count()
    )
)

这就提出了:

代码语言:javascript
复制
ValueError: This queryset contains a reference to an outer query and may only be used in a subquery.

你知道怎么做吗?

EN

回答 2

Stack Overflow用户

发布于 2022-09-29 00:28:44

.count()不返回查询集:它执行查询集。这就是为什么Django抱怨。

我不知道.active()做什么,但是如果忽略这一点,你可以

代码语言:javascript
复制
Agent.objects.annotate(
    active_cars=Count('client__car__id')
)

不需要子查询。

票数 0
EN

Stack Overflow用户

发布于 2022-09-29 00:51:06

假设您的Car模型有一个名为"active“的布尔字段,而这正是您希望筛选计数的方法,那么您可以将一个filter参数传递给Count,以过滤已计数的行。

代码语言:javascript
复制
from django.db.models import Count, Q

Agent.objects.annotate(
    active_cars=Count('client__car', filter=Q(client__car__active=True))
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73888992

复制
相关文章

相似问题

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