使用Model.objects.all()时减少对同一Django模型的查询

时间:2016-03-15 16:31:09

标签: django django-templates django-views

我需要在同一型号的多个列上执行总和,目前我的当前设置有7个查询

def traffic_list(request, template_name='traffic_list.html'):
    traffic = Traffic.objects.all()
    total_sessions = Traffic.objects.all().aggregate(Sum('sessions')).get('sessions__sum')
    total_new_users = Traffic.objects.all().aggregate(Sum('new_users')).get('new_users__sum')
    total_reminder = Traffic.objects.all().aggregate(Sum('reminder')).get('reminder__sum')
    total_campaigns = Traffic.objects.all().aggregate(Sum('campaigns')).get('campaigns__sum')
    total_new_sales = Traffic.objects.all().aggregate(Sum('new_sales')).get('new_sales__sum')
    total_sales_renewals = Traffic.objects.all().aggregate(Sum('sales_renewals')).get('sales_renewals__sum')

我知道必须有一种干嘛的做法。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您可以在一个查询中执行此操作:

traffic = Traffic.objects.all().aggregate(Sum('sessions'),
                                          Sum('new_users'),
                                          ...)
traffic_sessions = traffic.get('sessions_sum')
...