我想计算每个 device_id 的最大 deployment__release_id 数量。我有以下内容:
release_breakdown = DeviceDeployment.objects \
.values('device_id') \
.annotate(release_id=Max('deployment__release_id')) \
.values('release_id')
它给了我我期望的查询集列表:
<QuerySet [{'release_id': 352}, {'release_id': 352}, {'release_id': 352}, {'release_id': 352}, {'release_id': 352}, {'release_id': 352}, {'release_id': 352}, {'release_id': 351}, {'release_id': 351}, {'release_id': 352}]>
当我想通过以下方式获得上述计数时:
release_breakdown = DeviceDeployment.objects \
.values('device_id') \
.annotate(release_id=Max('deployment__release_id')) \
.values('release_id')
.annotate(rcount=Count('release_id'))
我收到以下错误:
Cannot compute Count('release_id'): 'release_id' is an aggregate
我想要的是
<QuerySet [{'release_id': 352, 'rcount': 7}, {'release_id': 351, 'rcount': 2}]>
我怎样才能得到这个
请您参考如下方法:
您不能对带注释的值使用注释。
参见 docs
您应该将查询修改为如下内容:
release_breakdown = DeviceDeployment.objects \
.values('device_id') \
.annotate(release_id=Max('deployment__release_id')) \
.values('release_id')
count = Counter(i['realease_id'] for i in release_breakdown)
应该返回这样的列表:
[{'352': 7}, {'351': 2}]
