• 我的django group by


    是的,在上一篇文章中很纠结的解决了 Django 下 group by的解决办法 ,但是性能和代码上都有些惨不忍睹,而且大家都说最好把问题解决在veiw层,所以有了这个改进版。总体思路是先按照员工对所有销售数据进行分类汇总,然后进行循环遍历,将销售数据中和当前分类项员工相同的提取出来,作为列表添加,然后在模板里用循环回滚出来就可以了。代码如下:

    仍然是那个数据库:models.py

    01# -*- coding: utf-8 -*-
    02from django.db import models
    03 
    04Class Staff(models.Model): #员工表
    05    name = models.CharField(max_length=20)
    06 
    07Class Sales_amount(models.Model): #销售表
    08    staff = models.ForeignKey(Staff)
    09    sdate = models.DateField()
    10    amount = models.DecimalField(max_digits=7,decimal_places=2)

    Views.py

    01# -*- coding: utf-8 -*-
    02from django.shortcuts import render_to_response
    03from django.db.models import Sum
    04from myproject.models import Staff,Sales_amount
    05def sale_view(request):
    06    sale_gourp_list=Sales_amount.objects.values('staff').annotate(s_amount =Sum('amount')) #按员工对销售数据进行分类汇总
    07    sale_list=[] #用于最后传递给模板的列表
    08    for sale_group in sale_group_list:
    09        sale_list.append({"total_amount": sale_group["s_amount"], "s_list": Sales_amount.objects.filter( staff=sale_group["staff"] )}) #将销售数据中员工与当前循环中员工值相等的列表抽取出来,并作为字典键"s_list"值
    10    return render_to_response("list.html",locals())

    list.html

    01<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
    02<html>
    03<head>
    04<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    05<title>员工销售数据分类统计</title>
    06</head>
    07<body>
    08 
    09<table border="1">
    10{% for sale in sale_list %}
    11    {% for in sale %}
    12    <tr>
    13        <td>{{s.sdate}}</td>
    14        <td>{{s.amount}}</td>
    15    </tr>
    16    {% endfor %}
    17    <tr bgcolor="#CCCCCC">
    18        <td>{{sale.s_list.0.staff}}</td><!--显示员工-->
    19        <td>{{sale.total_amount}}</td><!--显示当前员工销售小计-->
    20    </tr>
    21{% endfor %}
    22</table>
    23</body>
    24</html>

    最终效果和解决办法1中的很像,只是销售额小计那行放到了分类数据的下面,当然现在这个是可以随意调整的了 -_-!!

     

  • 相关阅读:
    js拖拽效果 javascript实现将元素拖拽如某容器效果demo
    使用 transform3D 造成网页闪动的底层原因剖析
    设置文字垂直 竖向 显示
    文本光标,高亮选中一些出来
    HTMl5的sessionStorage和localStorage
    event 事件兼容性处理 keycode 大全
    收藏个支持进度条与文件拖拽上传的js File Uploader
    three.js 3D效果
    Winform下的地图开发控件(GMap.NET)使用心得
    ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷
  • 原文地址:https://www.cnblogs.com/lhj588/p/2516037.html
Copyright © 2020-2023  润新知