浏览 4567 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-09
最后修改:2011-11-06
猛击我
为方便你的阅读建议查看本文原地址: 是的,在 上一篇文章 中很纠结的解决了 Django 下 group by的解决 办法 ,但是性能和代码上都有些惨不忍睹,而且大家都说最好把问题解决在veiw层,所以有了这个改进版。总体思路是先按照员工对所有销售数据进行分类汇总,然后进行循环遍历,将销售数据中和当前分类项员工相同的提取出来,作为列表添加,然后在模板里用循环回滚出来就可以了。代码如下: 仍然是那个数据库:MODELS.PY 01 # -*- coding: utf-8 -*- 02 from django.db import models 03 04 Class Staff(models.Model): #员工表 05 name = models.CharField(max_length=20) 06 07 Class 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 1 # -*- coding: utf-8 -*- 2 from django.shortcuts import render_to_response 3 from django.db.models import Sum 4 from myproject.models import Staff,Sales_amount 1 def sale_view(request): 2 sale_gourp_list=Sales_amount.objects.values('staff').annotate(s_amount=Sum('amount')) #按员工对销售数据进行分类汇总 3 sale_list=[] #用于最后传递给模板的列表 4 for sale_group in sale_group_list: 5 sale_list.append({"total_amount":sale_group["s_amount"],"s_list":Sales_amount.objects.filter(staff=sale_group["staff"])}) #将销售数据中员工与当前循环中员工值相等的列表抽取出来,并作为字典键"s_list"值 6 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 s 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中的很像,只是销售额小计那行放到了分类数据的下面,当然现在这个是可以随意调整的了 -_-!! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |