Django:解压缩参数列表以便在聚合查询中使用

时间:2010-02-20 14:04:35

标签: python sql django django-models

我正在尝试创建一个半动态聚合函数,它将返回列表中所有字段的总和。假设运行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)...'] 

(这与没有聚合的返回相同)

WORKS

qs = cl.get_query_set()
qs = qs.aggregate(*[Sum(field) for field in tuple])

在添加聚合时错过了定义qs = - 有助于休息几分钟并且看起来很新鲜

1 个答案:

答案 0 :(得分:3)

自从这项工作以来,我把它作为一个答案,所以人们会在谷歌搜索时轻松找到它:

qs = cl.get_query_set()
qs = qs.aggregate(*[Sum(field) for field in tuple])