接着上期代码内容,继续完善优化系统功能。
本次增加任务完成率统计功能,为更好的了解哪些任务完成率高,哪些任务完成率低。
该功能完成后,学习任务系统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 -------------------------------------------------