Django 查询集:切片查询集后聚合不起作用

ape*_*ari 4 python django aggregate django-queryset slice

Car.objects.all() # 5 cars in db, every car costs 1000 $

Car.objects.all().aggregate(Sum("price")) # result: 5000

# aggregate only on a subset

Car.objects.all()[3:].aggregate(Sum("price")) # result: 5000!, not 3000

# with filter()[3:] i got the same results!
Run Code Online (Sandbox Code Playgroud)

为什么?切片未在数据库中评估?

我怎样才能用聚合来实现这一点?

bvi*_*dal 6

似乎不可能在切片上使用聚合,正如此公开票所建议的那样: https: //code.djangoproject.com/ticket/12886

一种解决方案是执行两个不同的查询。第一个用于检索汽车子集,第二个用于实际执行聚合:

qs = Car.objects.all()[:3]
sub_sum = Car.objects.filter(pk__in=qs).aggregate(Sum("price"))
Run Code Online (Sandbox Code Playgroud)