Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django查询集聚合不';I don’我认为它不能正常工作_Django - Fatal编程技术网

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)

谢谢你的造型信息。。。这个问题有答案吗?