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. oracle--数据库扩容后出现ORA-27102

    一,问题描述 Connected to an idle instance. SQL> startup nomount ORA: obsolete or deprecated parameter( ...

  2. java byte[]和base64互相转换

      1.方式一 import java.io.UnsupportedEncodingException; import java.util.Base64; // byte[]转base64 Strin ...

  3. http与tcp,udp的区别

    1.网络协议的概念 (1)在学习网络课程的时候,老师会讲iso七层模型,有应用层 表示层 会话层 传输层 网络层 数据链路层 物理层,其中http就属于应用层,tcp与udp是属于传输层,如图1.1( ...

  4. 第26课 std::async异步任务

    一. std::async函数模板 (一)std::async和std::thread的区别 1. 两者最明显的区别在于async采用默认启动策略时并不一定创建新的线程.如果系统资源紧张,那么std: ...

  5. 利用Jenkins打包并远程部署SpringBoot应用

    本文Jenkins版本2.190.2,为19年11月最新 1.安装Jenkins.Git.Maven和JDK Jenkins安装参考:https://www.cnblogs.com/zhi-leaf/ ...

  6. long 在不同操作系统下所占用的字节数

    不同平台下C\C++数值数据类型长度如下: 类型 win32 win64 linux32 linux64 其中long类型和指针类型需要特别注意,编写跨平台的软件时尽量不要使用long类型,或者需要对 ...

  7. 【转】Python入门:Anaconda和Pycharm的安装和配置

    子曰:“工欲善其事,必先利其器.”学习Python就需要有编译Python程序的软件,一般情况下,我们选择在Python官网下载对应版本的Python然后用记事本编写,再在终端进行编译运行即可,但是对 ...

  8. MongoDB学习笔记(五)

    MongoDB 查看执行计划 MongoDB 中的 explain() 函数可以帮助我们查看查询相关的信息,这有助于我们快速查找到搜索瓶颈进而解决它,本文我们就来看看 explain() 的一些用法及 ...

  9. WebRTC之框架与接口

    出处:http://www.cnblogs.com/fangkm/p/4370492.html 上一篇文章简单地介绍了下WebRTC的协议流程,这一篇就开始介绍框架与接口. 一提到框架,本能地不知道从 ...

  10. 阿里OSS前端直传

    第一次写博客,如有错误请多多指教. 先上代码吧: ossUpload = function (file, fun, funParameter) { //第一此请求后台服务器获取认证请求 $.ajax( ...