接着上期代码内容,继续完善优化系统功能。

本次增加任务完成率统计功能,为更好的了解哪些任务完成率高,哪些任务完成率低。

该功能完成后,学习任务系统1.0版本就基本完成了。

1,编辑urls配置文件:
./mysite/study_system/urls.py

path('task/getClassTaskList/', views.getClassTaskList, name='getClassTaskList'),

2,编辑视图文件:
./mysite/study_system/views.py

def getClassTaskList(request):
'''
@方法名称: 获取任务完成率统计
@作 者: PandaCode辉
@weixin公众号: PandaCode辉
@创建时间: 2023-10-10
'''
# 响应容器
rsp_dict = {}
# 获取当前用户名
username = request.session.get('username')
# 根据用户名获取用户对象
cur_user = StudyUser.objects.get(username=username)
print('根据用户名查询用户对象:' + str(cur_user)) user_list = [cur_user]
# 如果当前用户是:3-学生,则查找对应辅导员用户
if cur_user.role == 3:
parent_id = cur_user.parent_id
# 根据用户ID获取用户对象
parent_user = StudyUser.objects.get(user_id=parent_id)
print('根据用户ID获取用户对象:' + str(parent_user))
user_list = [cur_user, parent_user]
# 限制发布人:系统和辅导员
data_set = StudyTask.objects.filter(created_by__in=user_list)
# 得到所有 任务名称和状态 的查询集合 QuerySet
data_list = data_set.values('task_title').annotate(all_cnt=Count('task_title')).order_by('-all_cnt')
data_set_list = data_set.values('task_title', "task_status").annotate(cnt=Count('task_title'))
# 循环处理分类统计数据
for data in data_list:
task_title = data['task_title']
data['un_finish'] = 0
data['finish'] = 0
data['delete'] = 0
for data_set in data_set_list:
if task_title == data_set['task_title']:
# 待完成数量
if data_set['task_status'] == 0:
data['un_finish'] = data_set['cnt']
elif data_set['task_status'] == 1:
# 已完成数量
data['finish'] = data_set['cnt']
else:
# 已作废数量
data['delete'] = data_set['cnt']
# 循环处理分类统计数据
for data in data_list:
all_cnt = data['all_cnt']
finish = data['finish']
# 计算完成率,保留2位小数,并转成百分比格式
data['finish_rate'] = str(format(float(finish) / float(all_cnt) * 100, '.2f')) + "%"
# 查询返回任务列表
rsp_dict['data_list'] = data_list context_object_name = "class_task_list"
template_name = "study_system/home.html"
# 'html_file': 'xxx.html' 动态指定模板页面 ; 'menuTo': 'task' = 任务管理 ;
rsp_dict['html_file'] = 'study_system/task/classTaskList.html'
rsp_dict['menuTask'] = 'menuTask'
rsp_dict['context_object_name'] = context_object_name return render(request, template_name, rsp_dict)

3,编辑页面模板代码:

3.1. 任务完成率统计页面
./mysite/study_system/templates/study_system/task/classTaskList.html

<style type="text/css">
table tr td {
font-size: 1.5em;
}
</style>
<!-- 结果显示区 -->
<div align="center">
<table style='width: 100%;'>
<tr>
<td colspan="6" align="center">任务完成率统计</td>
</tr>
<tr style="font-weight: bold; background: #FFEC8B;text-align: center">
<td>序号</td>
<td>任务标题</td>
<td>任务发布总次数</td>
<td>待完成任务数</td>
<td>已完成任务数</td>
<td>任务完成率</td>
</tr>
{% if data_list %}
{% for data in data_list %}
<tr style="color: red;text-align: center">
{# forloop.counter 可以记录循环的次数,作为列表序号#}
<td>{{ forloop.counter }}</td>
<td>{{ data.task_title }}</td>
<td>{{ data.all_cnt }}</td>
<td>{{ data.un_finish }}</td>
<td>{{ data.finish }}</td>
<td>{{ data.finish_rate }}</td>
</tr>
{% endfor %}
{% else %}
<tr>
<td colspan="6" id="con_title">查无记录</td>
</tr>
{% endif %}
</table>
</div>

4,运行测试-任务完成率统计:

-------------------------------------------------end -------------------------------------------------

Django实战项目-学习任务系统-任务完成率统计的更多相关文章

  1. 01-Flutter移动电商实战-项目学习记录

    一直想系统性的学习一下 Flutter,正好看到该课程<Flutter移动电商实战>的百度云资源,共 69 课时,由于怕自己坚持不下去(经常学着学着就不学了),故采用博客监督以记之. 1. ...

  2. Node.js实战项目学习系列(1) 初识Node.js

    前言 一直想好好学习node.js都是半途而废的状态,这次沉下心来,想好好的学习下node.js.打算写一个系列的文章大概10几篇文章,会一直以实际案例作为贯穿的学习. 什么是node Node.js ...

  3. Django ---- blog项目学习所得

    一.登录功能 1.采用ajax 提交form表单的方式 2.后台生成随机验证码,登录时提交验证码 3.用PLI库生成随机验证码,置于session中,登录时与前台提交的code进行upeer()的验证 ...

  4. SpringMVC+Mybatis+Mysql实战项目学习--环境搭建

    1.开发IDE:Spring Tool Suite(自带maven插件) 下载地址https://spring.io/tools/sts/all 在STS.ini配置信息中加下面一行 保证编码格式为u ...

  5. Node.js实战项目学习系列(2) 开发环境和调试工具

    前言 上一节让我们对Node.js有一个初步的了解,那么现在可以开始正式学习下Node.js的开发了,但是任何一门语言要设计到开发,就必须先学习开发环境以及调试.本文将主要讲解这些内容. 本文涉及到的 ...

  6. Node.js实战项目学习系列(4) node 对象(global、process进程、debug调试)

    前言 在之前的课程我们学习了Node的模块化规则,接下来我们将学习下 Node的几个新特性:global ,process进程,debug调试 global 跟在浏览器中的window一样都是全局变量 ...

  7. Node.js实战项目学习系列(5) node基础模块 path

    前言 前面已经学习了很多跟Node相关的知识,譬如开发环境.CommonJs,那么从现在开始要正式学习node的基本模块了,开始node编程之旅了. path path 模块提供用于处理文件路径和目录 ...

  8. Node.js实战项目学习系列(3) CommonJS 模块化规范

    前言 想开始编写Node.js代码,那么我们就必须先熟悉它的模块化规范CommonJS,本文将详细讲解CommonJS规范 本文代码 >>> github 地址 CommonJS N ...

  9. Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面

    1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...

  10. Github点赞超多的Spring Boot学习教程+实战项目推荐!

    Github点赞接近 100k 的Spring Boot学习教程+实战项目推荐!   很明显的一个现象,除了一些老项目,现在 Java 后端项目基本都是基于 Spring Boot 进行开发,毕竟它这 ...

随机推荐

  1. Qt开发经验小技巧241-245

    QString类是我个人认为Qt所有类中的精华,封装的无可挑剔.内置了各种进制数据的转换,比如将数据转成10进制.16进制显示,或者将10进制.16进制数据转成字符串显示.这里很容易忽略的一点就是,很 ...

  2. Qt编写可视化大屏电子看板系统25-模块3设备监控

    一.前言 设备监控主要用来实时监测制造零件等使用的设备的工作运行状态,每个设备都有对应的需要.分组名称.分组编号.设备名称.文字1.文字2.工作状态(1-开机 2-待机 3-维护 4-空),不同的工作 ...

  3. Python项目开发案例集锦pdf

    下载链接:https://www.jb51.net/books/780548.html

  4. tomcat源码分析(二)如何处理请求

    概述 tomcat的核心就是处理请求, 接收Request, 建立Socket链接, 处理,返回Response. 通过前面的架构图可以知道每个Service都包括连接器Connector组件和容器C ...

  5. 在Ubuntu WSL2里配置GDAL Docker环境

    在Ubuntu WSL2里配置GDAL Docker环境 启用systemd # Ubuntu中执行 echo -e "[boot]\nsystemd=true" | sudo t ...

  6. JVM实战—11.OOM的原因和模拟以及案例

    大纲 1.线上系统突然由于OOM内存溢出挂掉 2.什么是内存溢出及哪些区域会发生内存溢出 3.Metaspace如何因类太多而发生内存溢出 4.无限制调用方法如何让线程的栈内存溢出 5.对象太多导致堆 ...

  7. .Net Core 管道底层源码实现

    在 .NET Core 中,请求处理管道是一个中间件(Middleware)链,用于处理 HTTP 请求并生成响应.管道的底层实现基于 Microsoft.AspNetCore.Http 命名空间中的 ...

  8. Solution -「UOJ #418」三角形

    \(\mathscr{Description}\)   Link.   给定一棵含有 \(n\) 个结点的有根树, 点 \(u\) 有正权 \(w_u\). 每次操作可以: 在 \(u\) 上放 \( ...

  9. Ellyn-Golang调用级覆盖率&方法调用链插桩采集方案

    词语解释 Ellyn要解决什么问题? 在应用程序并行执行的情况下,精确获取单个用例.流量.单元测试走过的方法链(有向图).出入参数.行覆盖等运行时数据,经过一定的加工之后,应用在覆盖率.影响面评估.流 ...

  10. MySQL---索引-性能-配置参数优化

    一般来说,要保证数据库的效率,要做好以下四个方面的工作:数 据库设计.sql语句优化.数据库参数配置.恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小.下面我们逐个阐明: 1.设计 ...