Django注释显示聚合总和并计算QuerySet的预切片

时间:2009-11-12 02:30:31

标签: django django-queryset

我有一个相当复杂的QuerySet,它使用大量注释值来获取整个记录集中的一些计数和总和。生成的行被分组,对于每个组,我显示该列的总和,或该列的计数等。

问题在于,当我对查询集进行切片以便对数据进行分页时,将对查询进行求值,并且计数和求和现在与切片查询集相关,而不是与完整查询集相关。

有没有办法避免这种情况,即保持返回的整个行中的总和/计数仍然返回切片查询集?

我试着看看我是否可以让查询集首先执行,并且只在执行后才对其进行切片,但是找不到怎么做,所以我不知道这是否有效(是吗?)

非常感谢, Harel的

2 个答案:

答案 0 :(得分:2)

您应该能够通过执行以下操作来获取查询集:

qs = list(qs)

此时它不再是一个查询集,只是一个常规的Python列表,可以照常切片。

当然,为分页执行此操作的问题在于,无论查看哪个页面,您都要从数据库返回整个记录集。如果您的数据集很大,这可能是一个真正的问题。鉴于您的要求,听起来似乎是不可避免的;您的查询要么处理所有记录,要么只处理其中的一些记录。没有看到更多细节,很难确定。

答案 1 :(得分:0)

我最终运行一个单独的查询来获取我的总和,并将其结果与实际页面一起返回。我正在处理的数据量实际上并不允许我在这样的整个查询集上工作。 谢谢卡尔!