django 统计表
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 统计表的更多相关文章
- django从零开始-模型
1.设置统计表 配置models.py from django.db import models # Create your models here. # 发布会 class Event(models ...
- Django模型层之单表操作
Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...
- Django之模型层:表操作
目录 Django之模型层:表操作 一.ORM简介 django测试环境搭建 Django终端打印SQL语句 二 单表操作 2.1 按步骤创建表 2.2记录 三.多表操作 1 创建模型 2 添加.删除 ...
- Django之模型层第一篇:单表操作
Django之模型层第一篇:单表操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数 ...
- 6、Django之模型层第一篇:单表操作
一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql.oracle ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- django server之间通过remote user 相互调用
首先,场景是这样的:存在两个django web应用,并且两个应用存在一定的联系.某些情况下彼此需要获取对方的数据. 但是我们的应用肯经都会有对应的鉴权机制.不会让人家随随便便就访问的对吧.好比上车要 ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
随机推荐
- Zabbix的基本功能
zabbix组件: 两核心组件: zabbix-server(监控者) :收集agent发送的数据,写入数据库(mysql.oracal.)中,再通过web展示出来.默认端口为10051. zabbi ...
- OBS录制全屏游戏的方法(超好录屏)
新版Windows设置 详见 https://github.com/obsproject/obs-studio/wiki/Laptop-Troubleshooting 新版的Windows 10: l ...
- kinaba 安装踩坑: FATAL Error: [elasticsearch.url]: definition for this key is missing
操作系统:Linux kibana 版本: 7.4.0 1. 在/etc/yum.repos.d/ 下新建 kibana.repo 配置 yum 源地址 内容如下: [root@localhost ...
- swagger案例Swagger案例
pom <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework ...
- 2019年上-C语言程序设计课程内容
第一节课 序言 为何学习C语言 打印hello world程序 编译步骤,认识编译器 冯诺依曼体系结构 hello world程序如何在计算机上运行的 第二节课 基本数据类型与表达式 求华氏温度对应的 ...
- Docker学习2-Docker的基本命令与使用
前言: 前些天有人问镜像是什么?容器有是什么?docker对于初学者来说,往往分不清楚镜像和容器,编程语言都知道有一个面向对象,类和实例,类比作镜像,实例比作容器. 有的人蹦着学习的心态的去群里问人, ...
- gogs私有代码库上传项目
https://blog.csdn.net/zhouxueli32/article/details/80538017 一.上传 在cmd命令里进入该项目 然后依次输入以下命令 git initgit ...
- Mysql序列(七)—— order by优化
前言 在mysql中满足order by的处理方式有两种: 让索引满足排序,即扫描有序索引然后再找到对应的行结果,这样结果即是有序: 使用索引查询出结果或者扫描表得到结果然后使用filesort排序: ...
- 使用Net Mail发送邮件
最近用到了发送邮件这个功能,简单记录一下案例.代码如下: using System; using System.Collections.Generic; using System.Linq; usin ...
- Postman安装使用
下载链接:https://www.getpostman.com/downloads/ 选择下载的版本 postman基础功能介绍 collection在postman里面相当于一个文件夹,可以把同一个 ...