Django查询集聚合不';I don’我认为它不能正常工作
以下代码片段旨在从数据库中形成一个基本查询集,可以根据该查询集进行若干计算:Django查询集聚合不';I don’我认为它不能正常工作,django,Django,以下代码片段旨在从数据库中形成一个基本查询集,可以根据该查询集进行若干计算: basicQuerySet = Job.objects.filter(g_end_time__gte=epochTimes[0]) \ .filter(g_end_time__lt=epochTimes[12]) \ .order_by('g_user__g_affiliation') \ .values('g_job_id','g_user_id','g_project','g_mach
basicQuerySet = Job.objects.filter(g_end_time__gte=epochTimes[0]) \
.filter(g_end_time__lt=epochTimes[12]) \
.order_by('g_user__g_affiliation') \
.values('g_job_id','g_user_id','g_project','g_machine','g_cpu_days', \
'g_user__g_affiliation','g_user__g_user','g_user__g_organization', \
'g_user__g_common_name')
# get all g_affiliations during the past twelve months and convert to a list
interimList = basicQuerySet.values('g_user__g_affiliation').distinct()
affiliationList = []
for i,u in enumerate(interimList):
if u['g_user__g_affiliation'] is not None:
affiliationList.append(u['g_user__g_affiliation'])
# For each affiliation, get data
affiliationUsageData = {}
for m in range(len(affiliationList)):
thisAffiliation = affiliationList[m]
thisAffiliationJobs = basicQuerySet.filter(g_user__g_affiliation=thisAffiliation).count()
thisAffiliationUsers = basicQuerySet.filter(g_user__g_affiliation=thisAffiliation).values('g_user_id').distinct().count()
interimNumber = basicQuerySet.filter(g_user__g_affiliation=thisAffiliation).aggregate(Sum('g_cpu_days'))
thisAffiliationDays = interimNumber['g_cpu_days__sum']
affiliationUsageData[thisAffiliation] = []
thisData = {'jobs':thisAffiliationJobs,'users':thisAffiliationUsers,'days':thisAffiliationDays}
affiliationUsageData[thisAffiliation].append(thisData)
不起作用的部分是聚合以获得“g_cpu_天”的总和
“basicQuerySet”确实返回了预期字段。
“ThisJobs”的计数返回正确的数字。
“thisAffiliationUsers”的计数返回正确的数字。
但是,聚合返回
interimNumber = {}
一本空字典
如果我创建一个新的查询集,直接进行聚合
interimNumber = Job.objects.filter(g_end_time__gte=epochTimes[0]) \
.filter(g_end_time__lt=epochTimes[12]).filter(g_user__g_affiliation=thisAffiliation).aggregate(Sum('g_cpu_days'))
thisAffiliationDays = interimNumber['g_cpu_days__sum']
然后返回期望的总和
显然,我需要一些教育。是否可以在不必再次访问数据库的情况下对查询集进行聚合(求和)
这是在DJango v1.6中运行的
提前感谢您的帮助(以及关于此代码段的任何其他提示,因为我对Django非常陌生) 我还没有回答这个问题,但我想每个人都可以从一些造型帮助中获益:
basicQuerySet = Job.objects.
filter(g_end_time__gte=epochTimes[0]). \
filter(g_end_time__lt=epochTimes[12]). \
order_by('g_user__g_affiliation'). \
values(
'g_job_id',
'g_user_id',
'g_project',
'g_machine',
'g_cpu_days',
'g_user__g_affiliation',
'g_user__g_user',
'g_user__g_organization',
'g_user__g_common_name'
)
# get all g_affiliations during the past twelve months and convert to a list
interimList = basicQuerySet.values('g_user__g_affiliation').distinct()
affiliationList = []
for i,u in enumerate(interimList):
if u['g_user__g_affiliation'] is not None:
affiliationList.append(u['g_user__g_affiliation'])
# For each affiliation, get data
affiliationUsageData = {}
for m in range(len(affiliationList)):
thisAffiliation = affiliationList[m]
thisAffiliationJobs = basicQuerySet.
filter(g_user__g_affiliation=thisAffiliation).\
count()
thisAffiliationUsers = basicQuerySet.\
filter(g_user__g_affiliation=thisAffiliation).\
values('g_user_id').\
distinct().\
count()
interimNumber = basicQuerySet.\
filter(g_user__g_affiliation=thisAffiliation).\
aggregate(Sum('g_cpu_days'))
thisAffiliationDays = interimNumber['g_cpu_days__sum']
affiliationUsageData[thisAffiliation] = []
thisData = {
'jobs':thisAffiliationJobs,
'users':thisAffiliationUsers,
'days':thisAffiliationDays
}
affiliationUsageData[thisAffiliation].append(thisData)
谢谢你的造型信息。。。这个问题有答案吗?