我正在尝试创建一个半动态聚合函数,它将返回列表中所有字段的总和。假设运行get_query_set()将返回一个筛选查询,其中包含列表中的所有字段以及其他一些可能无法在Sum聚合(日期字段,字段字段,外键等等)中播放得很好的字段。 / p>
我到目前为止提出的最好的例子如下所示,这主要是一个关于Django特定用法的python问题,尽管我的Python-Fu并不是最强的......
qs = cl.get_query_set().aggregate(Sum('permits_submitted'), Sum('permits_pulled'), Sum('permits_posted'))
返回: {'permits_pulled__sum':5772,'permits_posted__sum':6723,'permits_submitted__sum':7276}
qs = cl.get_query_set().aggregate(Sum('permits_submitted')).aggregate(Sum('permits_pulled'))
返回:错误
qs = cl.get_query_set().aggregate(Sum('permits_submitted', 'permits_pulled', Sum('permits_posted'))
返回:错误
tuple = (
'permits_submitted',
'permits_pulled',
'permits_posted',
)
qs = cl.get_query_set()
for field in tuple:
qs.aggregate(Sum(field))
返回:错误
qs = cl.get_query_set()
qs.aggregate(*[Sum(field) for field in tuple])
返回:
[<permit_runner: User's report for 2010-02-18>, <permit_runner: User's report for 2010-02-19>, '...(remaining elements truncated)...']
(这与没有聚合的返回相同)
qs = cl.get_query_set()
qs = qs.aggregate(*[Sum(field) for field in tuple])
在添加聚合时错过了定义qs = - 有助于休息几分钟并且看起来很新鲜
答案 0 :(得分:3)
自从这项工作以来,我把它作为一个答案,所以人们会在谷歌搜索时轻松找到它:
qs = cl.get_query_set()
qs = qs.aggregate(*[Sum(field) for field in tuple])