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

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

该功能完成后,学习任务系统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. 古早的遗传算法碰到LLM->😊AutoDAN Generating Stealthy Jailbreak Prompts on💗Aligned Large Language Models

    师兄推给我的一篇ICLR,抽出时间阅读整理了附录前的内容 这次没有完全翻译,因为我想组会上分享,转成自己的话 禁止盗用,侵权必究!!!欢迎大家积极举报

  2. [转]spring-framework-x.x.x.RELEASE-dist下载教程

    原文链接: spring-framework-x.x.x.RELEASE-dist下载教程

  3. WebClient 用法小结

    进来的项目中要实现能够在windows service中调用指定项目的链接页面.由于访问页面时候使用的是ie浏览器或其他浏览器,所以想起用webclient类. 如果只想从特定的URI请求文件,则使用 ...

  4. CDS标准视图:维护任务清单数据 I_MaintenanceTaskListData

    视图名称:维护任务清单数据 I_MaintenanceTaskListData 视图类型:基础 视图代码: 点击查看代码 @AbapCatalog.sqlViewName: 'IPMTASKLISTD ...

  5. springboot之结合mybatis增删改查解析

    1. 场景描述 本节结合springboot2.springmvc.mybatis.swagger2等,搭建一个完整的增删改查项目,希望通过这个基础项目,能帮忙朋友快速上手springboot2项目. ...

  6. [译] WinForms:分析一下(我用 Visual Basic 写的)

    原文 | Klaus Loeffelmann 翻译 | 郑子铭 如果您从未看过电影<分析这一点>,下面是简短的介绍:假设一个纽约家族的成员有可疑的习惯,他决定认真考虑接受治疗以改善他的精神 ...

  7. 玩转云端 | AccessOne实用窍门之三步搞定门户网站防护与加速

    随着互联网的飞速发展,网站建设已成为企事业单位推广.提供服务的重要途径之一.在数字技术快速迭代的当下,如何在保障网站安全的前提下提供高效服务,是企事业单位需要着重考虑的内容. 网站安全防护是网站建设后 ...

  8. [记录点滴] 一个解决Lua 随机数生成问题的办法

    [记录点滴] 一个解决Lua 随机数生成问题的办法 0x00 摘要 本文是开发中的简略记录,具体涉及知识点有:Lua,随机数. 0x01 背景 Lua语言生成随机数需要用到两个函数: math.ran ...

  9. Iceberg参数调整

    1.读取参数介绍 属性   默认值   描述 read.split.target-size 134217728 (128 MB) 组合数据输入分割时的目标大小 read.split.metadata- ...

  10. FLink参数pipeline.operator-chaining介绍

    1.当使用flink提交一个任务,没有给算子设置并行度情况下,默认所有算子会chain在一起,整个DAG图只会显示一个算子,虽然有利于数据传输,提高程序性能,但是无法看到数据的输入和疏忽,业绩反压相关 ...