Python Django queryset:切片queryset后的聚合不';行不通
为什么??切片不以db计算Python Django queryset:切片queryset后的聚合不';行不通,python,django,aggregate,slice,django-queryset,Python,Django,Aggregate,Slice,Django Queryset,为什么??切片不以db计算 如何使用聚合实现这一点?aggregate的工作原理是修改发送到数据库的查询,从而在数据库端进行聚合。你有两个选择 在使用聚合之前,您可以使用过滤器来减少查询集,而不是通过切片来减少查询集 在切片之后,您必须用Python进行聚合,例如,sum(car.price用于car-in-cars)。切片后,查询将发送到数据库,因此您不能再通过ORM进行聚合(即QuerySet方法) 似乎不可能在切片上使用聚合,因为此公开票证表明: 一种解决方案是执行两个不同的查询。第一个用
如何使用聚合实现这一点?
aggregate
的工作原理是修改发送到数据库的查询,从而在数据库端进行聚合。你有两个选择
聚合
之前,您可以使用过滤器
来减少查询集,而不是通过切片来减少查询集李>
sum(car.price用于car-in-cars)
。切片后,查询将发送到数据库,因此您不能再通过ORM进行聚合(即QuerySet方法)李>
似乎不可能在切片上使用聚合,因为此公开票证表明: 一种解决方案是执行两个不同的查询。第一个用于检索汽车子集,第二个用于实际执行聚合:
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!
qs = Car.objects.all()[:3]
sub_sum = Car.objects.filter(pk__in=qs).aggregate(Sum("price"))