首页 > 其他分享 >Django实战项目-学习任务系统-任务完成率统计

Django实战项目-学习任务系统-任务完成率统计

时间:2023-11-14 20:45:21浏览次数:31  
标签:task list finish Django 任务 set user 完成率 data

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

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

该功能完成后,学习任务系统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 -------------------------------------------------

 

标签:task,list,finish,Django,任务,set,user,完成率,data
From: https://www.cnblogs.com/xh2023/p/17832467.html

相关文章

  • 03. 创建Django项目
    一、创建Django项目二、Django简单示例2.1、映射URL  用户通过在浏览器中输入URL和单击链接来请求网页,因此需要确定项目需要哪些URL。主页的URL最重要,它是用户用来访问项目的基础URL。  我们在创建Django项目时,Django默认帮我们配置好的路由配置。  我们......
  • 数据科学和计算密集型任务的10个主题
    以下是数据科学和计算密集型任务中的十个主题:1.数据清洗和预处理:数据科学中的第一步通常是清洗和预处理数据,包括处理缺失值、异常值、重复值和噪声等。2.特征工程:特征工程是从原始数据中提取有用的特征,以供机器学习模型使用。这包括特征选择、特征变换和特征生成等技术。3.......
  • 过期监听实现定时任务的反面教材
    一、场景    在电商、支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时间段后进行关闭操作。    像某宝、某东都有这样的逻辑,而且时间很准确,误差在1s内,那他们是怎么实现的呢?    一般实现方法有几种: 使用RocketMQ、RabbitM......
  • Tita 「OKR、任务、报表」细节优化升级
    升级详情Tita-OKR和新绩效一体化管理平台一、【OKR 仪表盘】支持按群组筛选统计·仪表盘的右上角支持按群组进行筛选统计·具体数据的下钻页面同样支持二、【OKR批量导入】支持对齐KR与对齐多个目标的填写导入需要对齐KR时填写好ID,对齐多个目标时用”、”隔开......
  • Django中ORM如何执行原生sql语句操作数据库
    django中的ORM提供的操作功能有限,在模型提供的查询API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句。Django提供两种方法使用原生SQL进行查询:一种是使用raw()方法,进行原生SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。另外就是用extra方法。......
  • 【celery详解】celery学习md笔记 第(2)期:Celery任务调度详解
    Celery是一个功能完备即插即用的任务队列。它使得我们不需要考虑复杂的问题,使用非常简单。celery看起来似乎很庞大,本文我们先对其进行简单的了解,然后再去学习其他一些高级特性。全套笔记直接地址:请移步这里共4章,12子模块介绍一下如何调用任务,队列路由.1.signature我......
  • Django4
    路由曾无名分组有名分组反向解析无名分组反向解析有名分组反向解析路由分发伪静态的概念了解名称空间了解虚拟环境了解diango1.x和django2.x的区别视图层:三板斧序列化模块(dumps  JsonResponse)form表单上传文件FBV (functionbasedview) 和CBV......
  • Teamcenter开发,时间表或者任务,如何获取子任务
    1、在胖客户端是看到对应子任务,是放在父任务的哪个属性的。2、你在胖客户端看父任务和子任务的关系,也是-1,所以这个就很奇怪了。 是这个属性 child_task_taglist 补充一下:时间表  和汇总任务的关系内码是:fnd0SummaryTask如果要获取时间表下面的子任务,不能通过时间......
  • ansible性能巡检+定时任务执行shell脚本
    一、ansible_使用ansible+shell脚本进行环境巡检1.编写脚本#用户目录下执行cd~#编辑vicheck.sh实现效果:脚本内容:巡检指标1:cpu使用率大于70,输出unhealth巡检指标2:内存使用率大于70,输出unhealth巡检指标3:/picclife磁盘使用率大于70,输出unhealth#!/bin/bash#cpu巡检sar......
  • Django的ORM映射机制
    DjangoORM的映射机制是指将Python的模型类与数据库表之间建立一种对应关系。这种映射关系允许开发者使用Python代码对数据库进行操作,而不需要直接编写SQL语句。DjangoORM的映射机制包括以下几个关键部分:模型类的定义:在Django中,开发者通过定义模型类来描述数据库表的结构。模型......