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


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

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

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

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

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

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

    1. def getClassTaskList(request):
    2. '''
    3. @方法名称: 获取任务完成率统计
    4. @作 者: PandaCode辉
    5. @weixin公众号: PandaCode辉
    6. @创建时间: 2023-10-10
    7. '''
    8. # 响应容器
    9. rsp_dict = {}
    10. # 获取当前用户名
    11. username = request.session.get('username')
    12. # 根据用户名获取用户对象
    13. cur_user = StudyUser.objects.get(username=username)
    14. print('根据用户名查询用户对象:' + str(cur_user))
    15. user_list = [cur_user]
    16. # 如果当前用户是:3-学生,则查找对应辅导员用户
    17. if cur_user.role == 3:
    18. parent_id = cur_user.parent_id
    19. # 根据用户ID获取用户对象
    20. parent_user = StudyUser.objects.get(user_id=parent_id)
    21. print('根据用户ID获取用户对象:' + str(parent_user))
    22. user_list = [cur_user, parent_user]
    23. # 限制发布人:系统和辅导员
    24. data_set = StudyTask.objects.filter(created_by__in=user_list)
    25. # 得到所有 任务名称和状态 的查询集合 QuerySet
    26. data_list = data_set.values('task_title').annotate(all_cnt=Count('task_title')).order_by('-all_cnt')
    27. data_set_list = data_set.values('task_title', "task_status").annotate(cnt=Count('task_title'))
    28. # 循环处理分类统计数据
    29. for data in data_list:
    30. task_title = data['task_title']
    31. data['un_finish'] = 0
    32. data['finish'] = 0
    33. data['delete'] = 0
    34. for data_set in data_set_list:
    35. if task_title == data_set['task_title']:
    36. # 待完成数量
    37. if data_set['task_status'] == 0:
    38. data['un_finish'] = data_set['cnt']
    39. elif data_set['task_status'] == 1:
    40. # 已完成数量
    41. data['finish'] = data_set['cnt']
    42. else:
    43. # 已作废数量
    44. data['delete'] = data_set['cnt']
    45. # 循环处理分类统计数据
    46. for data in data_list:
    47. all_cnt = data['all_cnt']
    48. finish = data['finish']
    49. # 计算完成率,保留2位小数,并转成百分比格式
    50. data['finish_rate'] = str(format(float(finish) / float(all_cnt) * 100, '.2f')) + "%"
    51. # 查询返回任务列表
    52. rsp_dict['data_list'] = data_list
    53. context_object_name = "class_task_list"
    54. template_name = "study_system/home.html"
    55. # 'html_file': 'xxx.html' 动态指定模板页面 ; 'menuTo': 'task' = 任务管理 ;
    56. rsp_dict['html_file'] = 'study_system/task/classTaskList.html'
    57. rsp_dict['menuTask'] = 'menuTask'
    58. rsp_dict['context_object_name'] = context_object_name
    59. return render(request, template_name, rsp_dict)

    3,编辑页面模板代码:

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

    1. <style type="text/css">
    2. table tr td {
    3. font-size: 1.5em;
    4. }
    5. style>
    6. <div align="center">
    7. <table style='width: 100%;'>
    8. <tr>
    9. <td colspan="6" align="center">任务完成率统计td>
    10. tr>
    11. <tr style="font-weight: bold; background: #FFEC8B;text-align: center">
    12. <td>序号td>
    13. <td>任务标题td>
    14. <td>任务发布总次数td>
    15. <td>待完成任务数td>
    16. <td>已完成任务数td>
    17. <td>任务完成率td>
    18. tr>
    19. {% if data_list %}
    20. {% for data in data_list %}
    21. <tr style="color: red;text-align: center">
    22. {# forloop.counter 可以记录循环的次数,作为列表序号#}
    23. <td>{{ forloop.counter }}td>
    24. <td>{{ data.task_title }}td>
    25. <td>{{ data.all_cnt }}td>
    26. <td>{{ data.un_finish }}td>
    27. <td>{{ data.finish }}td>
    28. <td>{{ data.finish_rate }}td>
    29. tr>
    30. {% endfor %}
    31. {% else %}
    32. <tr>
    33. <td colspan="6" id="con_title">查无记录td>
    34. tr>
    35. {% endif %}
    36. table>
    37. div>

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

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

  • 相关阅读:
    Python实验四:Python程序设计之文件
    45-1 waf绕过 - 文件上传绕过WAF方法
    Partial derivative
    OLED透明屏触控:引领未来科技革命的创新力量
    Django网站开发 02.CSS层叠样式表(Cascading Style Sheets)
    【Leetcode每日一题】 位运算 - 两整数之和(难度⭐)(37)
    Spark大数据分析与实战笔记(第一章 Scala语言基础-3)
    AMQP协议详解
    linux正则表达式
    【开源】基于Vue.js的森林火灾预警系统的设计和实现
  • 原文地址:https://blog.csdn.net/xionghui2007/article/details/134407555