1.

复杂版

统计,通过跨表查询和timedate模块过滤找到

 from django.db.models import Count

 class TongJiView(View):
def today(self):
import datetime
today=datetime.datetime.now().date()
customer_list=Customer.objects.filter(deal_date=today) # 查询每一个销售的名字以及今天对应的成单量
ret=UserInfo.objects.filter(depart_id=2,customers__deal_date=today).annotate(c=Count("customers")).values_list("username","c")
print(ret)
ret=[[item[0],item[1]] for item in list(ret)] return {"customer_list":customer_list,"ret":list(ret)} def zuotian(self):
import datetime
zuotian = datetime.datetime.now().date()-datetime.timedelta(days=1)
customer_list = Customer.objects.filter(deal_date=zuotian) # 查询每一个销售的名字以及昨天对应的成单量
ret = UserInfo.objects.filter(depart_id=2, customers__deal_date=zuotian).annotate(
c=Count("customers")).values_list("username", "c")
print(ret)
print(ret)
ret = [[item[0], item[1]] for item in list(ret)] return {"customer_list": customer_list, "ret": list(ret)} def week(self):
import datetime
today = datetime.datetime.now().date()
weekdelta = datetime.datetime.now().date()-datetime.timedelta(weeks=1)
customer_list = Customer.objects.filter(deal_date__gte=weekdelta,deal_date__lte=today) # 查询每一个销售的名字以及昨天对应的成单量
ret = UserInfo.objects.filter(depart_id=2, customers__deal_date__gte=weekdelta,customers__deal_date__lte=today).annotate(
c=Count("customers")).values_list("username", "c")
print(ret) print(ret)
ret = [[item[0], item[1]] for item in list(ret)] return {"customer_list": customer_list, "ret": list(ret)} def recent_month(self):
import datetime
today = datetime.datetime.now().date()
weekdelta = datetime.datetime.now().date()-datetime.timedelta(weeks=4)
customer_list = Customer.objects.filter(deal_date__gte=weekdelta,deal_date__lte=today) # 查询每一个销售的名字以及昨天对应的成单量
ret = UserInfo.objects.filter(depart_id=2, customers__deal_date__gte=weekdelta,customers__deal_date__lte=today).annotate(
c=Count("customers")).values_list("username", "c")
print(ret) print(ret)
ret = [[item[0], item[1]] for item in list(ret)] return {"customer_list": customer_list, "ret": list(ret)} def get(self,request): date=request.GET.get("date","today") if hasattr(self,date):
context=getattr(self,date)() return render(request,"customer/tongji.html",context)

后端.py

 <!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"> </head>
<body>
<h3>客户成单量统计</h3> <hr>
<a href="?date=today">今天</a>
<a href="?date=zuotian">昨天</a>
<a href="?date=week">最近一周</a>
<a href="?date=recent_month">最近一个月</a>
<hr> <div class="container">
<div class="row">
<div class="col-md-12">
<table id="example2" class="text-center table table-bordered table-hover">
<thead>
<tr>
<th class="text-center">编号</th>
<th class="text-center">客户姓名</th>
<th class="text-center">性别</th>
<th class="text-center">客户来源</th>
<th class="text-center">销售</th>
<th class="text-center">所报班级</th>
</tr>
</thead>
<tbody> {% for customer in customer_list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ customer.name }}</td>
<td>{{ customer.get_sex_display }}</td>
<td>{{ customer.get_source_display }}</td>
<td>{{ customer.consultant }}</td>
<td>{{ customer.get_classlist }}</td> </tr>
{% endfor %} </tbody>
</table>
<hr>
<div id="container" style="width:600px;height:400px"></div>
</div>
</div>
</div> <script src="/static/highchart/highcharts.js"></script>
<script>
var chart = Highcharts.chart('container', {
chart: {
type: 'column'
},
title: {
text: '统计成单量'
},
subtitle: {
text: '数据截止 2017-03,来源: <a href="https://en.wikipedia.org/wiki/List_of_cities_proper_by_population">Wikipedia</a>'
},
xAxis: {
type: 'category',
labels: {
rotation: 0 // 设置轴标签旋转角度
}
},
yAxis: {
min: 0,
title: {
text: '成单数'
}
},
legend: {
enabled: false
},
tooltip: {
pointFormat: '成单人数: <b>{point.y} 单</b>'
},
series: [{
name: '总人口',
data: {{ ret|safe }},
dataLabels: {
enabled: true,
rotation: -90,
color: '#FFFFFF',
align: 'right',
format: '{point.y:.1f}', // :.1f 为保留 1 位小数
y: 10
}
}]
}); </script>
</body>
</html>

前端

2.简单版

 from django.views import View
from app01.models import Customer,UserInfo
from django.db.models import Count class TongJiView2(View): def get(self,request):
date=request.GET.get("date","today")
# func=getattr(self,date)
#ret=func()
import datetime
now=datetime.datetime.now().date()
delta1=datetime.timedelta(days=1)
delta2=datetime.timedelta(weeks=1)
delta3=datetime.timedelta(weeks=4) condition={
"today":[{"deal_date__date":now},{"customers__deal_date":now}],
"yesterday":[{"deal_date__date":now-delta1},{"customers__deal_date":now-delta1}],
"week":[{"deal_date__gte":now-delta2,"deal_date__lte":now},
{"customers__deal_date__gte":now-delta2,"customers__deal_date__lte":now}
],
"recent_month":[{"deal_date__gte":now-delta3,"deal_date__lte":now},
{"customers__deal_date__gte":now-delta3,"customers__deal_date__lte":now}
],
} customer_list=Customer.objects.filter(**(condition.get(date)[0]))
ret=UserInfo.objects.all().filter(**(condition.get(date)[1])).annotate(c=Count("customers")).values_list("username","c")
ret = [[item[0], item[1]] for item in list(ret)] return render(request,"customer/tongji.html",locals())

后端.py

django 统计表的更多相关文章

  1. django从零开始-模型

    1.设置统计表 配置models.py from django.db import models # Create your models here. # 发布会 class Event(models ...

  2. Django模型层之单表操作

    Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...

  3. Django之模型层:表操作

    目录 Django之模型层:表操作 一.ORM简介 django测试环境搭建 Django终端打印SQL语句 二 单表操作 2.1 按步骤创建表 2.2记录 三.多表操作 1 创建模型 2 添加.删除 ...

  4. Django之模型层第一篇:单表操作

    Django之模型层第一篇:单表操作 一 ORM简介 ​ 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数 ...

  5. 6、Django之模型层第一篇:单表操作

    一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql.oracle ...

  6. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  7. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  8. django server之间通过remote user 相互调用

    首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...

  9. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

随机推荐

  1. [LeetCode] 28. Implement strStr() 实现strStr()函数

    Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...

  2. Lambda 表达式已阅

    Lambda 表达式已阅 君子之间淡如水,何谓淡如水?并不时常想起,但却无处不在. 背景:This is f**king why we code? 可以让Java 代码异常简洁的Lambda 表达式, ...

  3. 100教程-100jc.cn

    个人编程笔记网站(持续更新) http://100jc.cn

  4. 判断一个类型是否为可空类型 System Nullable

    bool IsNullableType(Type theType)  {      return (theType.IsGenericType && theType.        G ...

  5. (十三)golang--程序流程控制

    1.顺序控制 若没有判断,没有跳转,程序由上至下依次执行 2.分支控制 单分支if 条件表达式 { 执行代码块} 双分支if 条件表达式 { 执行代码块1} else { 执行代码块2} 多分支if ...

  6. iis7.5和iis8上传文件大小限制和上传时间限制

    在IIS 6.0中,不设置默认大小为4M,设置文件上传大小的方法,maxRequestLength(KB),executionTimeout(毫秒),配置如下节点: <system.web> ...

  7. Aliplayer视频点播加密播放

    Aliplayer视频播放器填坑 aliplayer视频点播分为Flash和HTML5两个版本,移动端不支持Flash播放器.Flash播放器兼容IE8+,HTML5播发器支持比较新的浏览器,对浏览器 ...

  8. SpringCloud入门概述

    SpringCloud入门概述 Spring的三大模块:SpringBoot(构建),Spring Cloud(协调),Spring Cloud Data Flow(连接)注意:Spring Boot ...

  9. 并行 Webclient(一)

    在 Stackoverflow 上看到了一个提问,关于并行的 WebClient,觉得回答者的代码很有参考性,下面记录一下,以便日后用到: 提问者: 我有一个功能基本上分为两个子功能. html=Re ...

  10. JavaIO学习:序列化流

    对象流 1.涉及到的类 ObjectInputStream 和 ObjectOutputStream 用于存储和读取基本数据类型数据或对象的处理流. 2.作用 ObjectOutputStream:内 ...