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中的使用以及实际应用给我们带来的效率提升. 首先 ...
随机推荐
- [LeetCode] 416. Partition Equal Subset Sum 相同子集和分割
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- leetcode 674. 最长连续递增序列
1. 题目 给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. 尽管 [1,3, ...
- C# 使用ConcurrentBag类处理集合线程安全问题
在日常的开发中,经常会遇到多个线程对同一个集合进行读写操作,就难免会出现线程安全问题. 以下代码,如果使用List<T>就会遇到问题:System.InvalidOperationExce ...
- 喜大普奔,又拍云全新产品 WebSocket 上线啦
作为一款现象级 MMORPG,魔兽世界迎来了自己的 9.0 版本.巧的是,又拍云最近也更新发布了一款产品--WebSocket.你可能会说,两者有个 mao 关系,不着急.我们先来聊聊魔兽世界~ 熟悉 ...
- 2019-11-29-WPF-依赖属性绑定不上调试方法
原文:2019-11-29-WPF-依赖属性绑定不上调试方法 title author date CreateTime categories WPF 依赖属性绑定不上调试方法 lindexi 2019 ...
- SpringMVC重要注解 @ControllerAdvice
@ControllerAdvice,是Spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强.让我们先看看@ControllerAdvice的实现: package org.spring ...
- <compilation debug="true" targetFramework="4.5.2"> 报错解决方案
有的时候新建项目,默认会选择比较高的 .net framework 版本如 4.5.2 有的时候发布项目就会遇到这个问题 解决的话 改成4.0就行了! 看你发布在哪里,如果在本地或者服务器,只要去下载 ...
- alpine使用的避坑指南
alpine,是一个重量仅为5 MB的最小Linux发行版.它还有基本的linux工具和一个不错的包管理器APK.APK非常稳定,有相当数量的包.由于体积小,在容器中很受欢迎,但是使用上坑也很多,大部 ...
- 在IE中点击转跳,并打开chorme浏览器继续浏览指定页面,IE自定义ocx控件开发
因项目需要,需要开发一个功能:在IE中点击转跳,并打开chorme浏览器继续浏览指定页面. 分析需求后,参考了: https://www.cnblogs.com/ffjiang/p/7908025.h ...
- 2019 安易迅java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.安易迅等公司offer,岗位是Java后端开发,因为发展原因最终选择去了安易迅,入职一年时间了,也成为了面试官 ...