我有经纪人客户和汽车模型。
在客户机模型中:agent = ForeignKey('Agent'...)
汽车模型:client = ForeignKey('Client'...)
我想注释(在代理QuerySet上)代理的所有客户端的活动汽车总数。
因此,如果代理Bob有客户Alice和Peter,Alice有3个活动汽车,Peter有2个活动汽车,那么active_cars变量将是5。
我试过:
Agent.objects.annotate(
active_cars=Subquery(
Car.objects.all().active().filter(
client__agent=OuterRef('pk')
).count()
)
)这就提出了:
ValueError: This queryset contains a reference to an outer query and may only be used in a subquery.你知道怎么做吗?
发布于 2022-09-29 00:28:44
.count()不返回查询集:它执行查询集。这就是为什么Django抱怨。
我不知道.active()做什么,但是如果忽略这一点,你可以
Agent.objects.annotate(
active_cars=Count('client__car__id')
)不需要子查询。
发布于 2022-09-29 00:51:06
假设您的Car模型有一个名为"active“的布尔字段,而这正是您希望筛选计数的方法,那么您可以将一个filter参数传递给Count,以过滤已计数的行。
from django.db.models import Count, Q
Agent.objects.annotate(
active_cars=Count('client__car', filter=Q(client__car__active=True))
)https://stackoverflow.com/questions/73888992
复制相似问题