![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # classtop_urls.py 2 # ————————64PerfectCRM实现CRM课程排名详情———————— 3 from django.conf.urls import url 4 from bpm.coursetop import coursetop_views 5 urlpatterns = [ 6 url( r'^coursetop_details/(d+)/$', coursetop_views.coursetop_details, name="coursetop_details" ), # 课程排名详情 7 8 # ————————65PerfectCRM实现CRM课程分数排名———————— 9 url( r'^coursetop_score/(d+)/$', coursetop_views.coursetop_score, name="coursetop_score" ), # 班级分数排行 10 # ————————65PerfectCRM实现CRM课程分数排名———————— 11 12 # ————————66PerfectCRM实现CRM课程作业排名———————— 13 url( r'^coursetop_homework/(d+)/$', coursetop_views.coursetop_homework, name="coursetop_homework" ), # 班级作业排行 14 # ————————66PerfectCRM实现CRM课程作业排名———————— 15 16 ] 17 # ————————64PerfectCRM实现CRM课程排名详情————————
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 # coursetop_views.py 2 # ————————64PerfectCRM实现CRM课程排名详情———————— 3 #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员ID: [分数, 排名] }————# 4 #班级学生详情#计算#{学员ID:分数} 5 from django.db.models import Sum #返回数组中所有值的和 6 def get_course_grades(class_obj):#返回整个班级的成绩 7 c=models.StudyRecord.objects.filter(course_record__from_class=class_obj).values_list('student') 8 a=Sum('score')#Sum返回数组中所有值的和 #学习成绩 9 e=c.annotate(a) #annotate数据库的数据聚合函数 10 class_grade_dic=dict(e)#{1: 285, 16: 190}#{学员ID:分数} 11 print( '全班成绩:', class_grade_dic) 12 return class_grade_dic #as class_grade_dic 13 14 #班级学生详情#计算 #{学员ID: [分数, 排名] } 15 def get_course_ranking(class_grade_dic):#返回整个班级的排名数据 16 ranking_list = sorted(class_grade_dic.items(),key=lambda x:x[1],reverse=True)#进行排序后的列表#以第2个参数对比#倒序 17 print('成绩排序:',ranking_list) 18 ranking_dic = {} 19 for item in ranking_list: 20 ranking_dic[item[0]] = [item[1], ranking_list.index(item)+1] #循环添加 排名数 到 排序后的列表 21 print( '全班排名:', ranking_dic)#{1: [285, 1], 10: [280, 2], }#{学员ID: [分数, 排名] } 22 return ranking_dic 23 #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员ID: [分数, 排名] }————# 24 25 from django.contrib.auth.decorators import login_required # 登陆后页面才能访问 26 from django.shortcuts import render #页面返回 27 from crm import models #数据库 28 #班级学生详情 29 @login_required # 登陆后页面才能访问 30 def coursetop_details(request,class_id): 31 classes_obj = models.ClassList.objects.get(id=class_id)#通过ID获取02班级表 32 enrollmentlist=classes_obj.enrollment_set.all()#通过班级ID,获取06学员报名信息表 33 34 class_grade_dic=get_course_grades(classes_obj.id)#{学员ID:分数} #全班成绩 # coursetop_tags.py 根据id 找对应的分数 35 ranking_dic=get_course_ranking(class_grade_dic)#{学员ID: [分数, 排名] } #全班排名 # coursetop_tags.py 根据id 找对应的排名 36 37 return render(request,'bpm_coursetop/coursetop_details.html',locals()) 38 # ————————64PerfectCRM实现CRM课程排名详情———————— 39 40 41 42 # ————————65PerfectCRM实现CRM课程分数排名———————— 43 #———— 班级学生详情——#计算 #{排名: (ID, 分数)}#排名查名字————# 44 def get_ranking_name(class_grade_dic): 45 lists=[] 46 ranking_list = sorted(class_grade_dic.items(),key=lambda x:x[1],reverse=True)#进行排序后的列表#以第2个参数对比#倒序 47 #ranking_list [(1, 285), (10, 280)] #按分高排序的ID顺序 48 for item in ranking_list: 49 temp={} 50 temp[ranking_list.index(item) + 1] = item # 循环添加 排名数 到 排序后的列表 51 lists.append(temp) 52 print( '排名查名字:', lists )#[{1: (1, 285)}, {2: (10, 280)}]#[{排名: (学员ID, 分数)}] 53 return lists 54 #———— 班级学生详情——#计算 #{排名: (ID, 分数)}#排名查名字————# 55 56 #班级学生详情#全班成绩排名 #通过#{排名: (ID, 分数)}#排名查名字 57 @login_required # 登陆后页面才能访问 58 def coursetop_score(request,class_id): 59 classes_obj = models.ClassList.objects.get(id=class_id)#通过ID获取02班级表 60 class_grade_dic=get_course_grades(classes_obj.id)#{学员ID:分数} #全班成绩 61 lists=get_ranking_name(class_grade_dic)#计算#[{排名: (学员ID, 分数)}] #按分高排序的ID顺序 62 return render(request,'bpm_coursetop/coursetop_score.html',locals()) 63 64 # ————————65PerfectCRM实现CRM课程分数排名———————— 65 66 # ————————66PerfectCRM实现CRM课程作业排名———————— 67 #————#班级学生详情#计算#学员已交作业的数量————# 68 #班级学生详情#计算#学员已交作业的数量 69 def get_already_homework(class_id): 70 score_list = models.StudyRecord.objects.select_related().filter(student=class_id ).values_list( 'score' )#学习成绩 71 number = 0 72 for score in score_list: 73 if score != (0,): # (0,"N/A") 74 number += 1 #通过 学习成绩 不等于0 计算#已交作业的数量 75 return number 76 #————#班级学生详情#计算#学员已交作业的数量————# 77 78 #班级学生详情#学员已交作业的数量#作业查名字 79 @login_required # 登陆后页面才能访问 80 def coursetop_homework(request,class_id): 81 classes_obj = models.ClassList.objects.get(id=class_id)#通过ID获取02班级表 82 class_grade_dic=get_course_grades(classes_obj.id)#{学员ID:分数} #全班成绩 83 ranking_dic=get_course_ranking(class_grade_dic)#{学员ID: [分数, 排名] } #全班排名 84 enrollmentlist=classes_obj.enrollment_set.all()#通过班级ID,获取06学员报名信息表 85 86 dict = {}#{1: 3, 4: 2,}#{学员ID: 数量} 87 for item in enrollmentlist: 88 d = get_already_homework( item.id )#根据06学员报名信息表#学员ID #计算#学员已交作业的数量 89 dict[item.id]= d 90 91 list = sorted(dict.items(),key=lambda x:x[1])#进行排序后的列表#以第2个参数对比 92 #list[ (4, 2), (16, 2)] #list[ (学员ID, 数量)] 93 94 lists=[] #[{1: (19, 0)}, {2: (20, 0)}]#[{排名: (学员ID, 数量)}] 95 for item in list: 96 temp={} 97 temp[list.index( item ) + 1] = item # 循环添加 排名数 到 排序后的列表 #按已交作业数量排序 98 lists.append(temp) 99 print('已交作业:',lists) 100 return render(request,'bpm_coursetop/coursetop_homework.html',locals()) 101 # ————————66PerfectCRM实现CRM课程作业排名————————
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 {#teacher_class_stu_list.html#} 2 {## ————————62PerfectCRM实现CRM讲师班级修改————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% load coursetop_tags %} 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 6 <div class="panel-default"> 7 <div class="panel-default"> 8 <div class="panel-body"> 9 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 10 讲师QQ:{{ request.user.stu_account }} </h4> 11 <ol class="breadcrumb"> 12 <li><a href="{% url 'teacher_class' %}">我的班级</a></li> 13 <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li> 14 <li><a href="{% url 'coursetop_homework' classes_obj.id %}">作业排名</a></li> 15 </ol> 16 <table class="table table-striped table-responsive"> 17 <thead> 18 <tr> 19 <th><a href="{% url 'coursetop_details' classes_obj.id %}">学员ID</a></th> 20 <th><a target="_blank" href="/king_admin/crm/enrollment/?enrolled_class={{ class_id }}">学员姓名</a> 21 </th> 22 <th>学员QQ</th> 23 <th>报名日期</th> 24 <th><a href="{% url 'coursetop_score' classes_obj.id %}">课程成绩</a></th> 25 <th><a href="{% url 'coursetop_score' classes_obj.id %}">班级排名</a></th> 26 <th>已交作业</th> 27 <th>出勤次数</th> 28 <th>迟到次数</th> 29 <th>缺勤次数</th> 30 <th>早退次数</th> 31 </tr> 32 </thead> 33 34 35 <tbody> 36 {% for enroll_objs in lists %} 37 {% for top,enroll_obj in enroll_objs.items %}{#分离提取K,V#[{排名: (学员ID, 分数)}]#} 38 {% id_enrollment enroll_obj.0 as enrollment %}{#enroll_obj.0 #学员ID#}{#通过学员ID查06学员报名信息表#} 39 <tr> 40 <td>{{ enroll_obj.0 }}</td> 41 {#学员id#} 42 <td>{{ enrollment.customer.name }}</td> 43 {#学员姓名#} 44 <td>{{ enrollment.customer.qq }}</td> 45 {#学员QQ#} 46 <td>{{ enrollment.date }}</td> 47 {#报名日期#} 48 <td> 49 {% fetch_stu_course_score class_grade_dic enroll_obj.0 %} {# 获取 学员 课程 分数#} 50 </td> 51 <td> 52 {% get_stu_grade_ranking ranking_dic enroll_obj.0 %} {# 得到 学员 年级 排名#} 53 </td> 54 <td style="color: #ff0f00"> 55 {% get_already_homework enroll_obj.0 %}{#已交作业#} 56 </td> 57 <td> 58 {% get_stu_attendance enroll_obj.0 %}{#出勤次数#} 59 </td> 60 <td> 61 {% get_stu_late enroll_obj.0 %}{#迟到次数#} 62 </td> 63 <td> 64 {% get_stu_absenteeism enroll_obj.0 %}{#缺勤次数#} 65 </td> 66 <td> 67 {% get_stu_early enroll_obj.0 %}{#早退次数#} 68 </td> 69 </tr> 70 {% endfor %} 71 {% endfor %} 72 </tbody> 73 </table> 74 </div> 75 </div> 76 </div> 77 {% endblock %}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 {#coursetop_details.html#} 2 {## ————————64PerfectCRM实现CRM课程排名详情————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% load coursetop_tags %} {#计算课程排名#} 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 6 <div class="panel-default"> 7 <div class="panel-default"> 8 <div class="panel-body"> 9 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 10 讲师QQ:{{ request.user.stu_account }} </h4> 11 <ol class="breadcrumb"> 12 <li><a href="{% url 'teacher_class' %}">我的班级</a></li> 13 <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li> 14 <li><a href="{% url 'coursetop_details' classes_obj.id %}">课程排行</a></li> 15 </ol> 16 <table class="table table-striped table-responsive"> 17 <thead> 18 <tr> 19 <th>学员ID</th> 20 <th><a target="_blank" href="/king_admin/crm/enrollment/?enrolled_class={{ class_id }}">学员姓名</a> 21 </th> 22 <th>学员QQ</th> 23 <th>报名日期</th> 24 <th> 25 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 26 <a href="{% url 'coursetop_score' classes_obj.id %}"> 27 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 28 课程成绩 29 </a> 30 </th> 31 <th> 32 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 33 <a href="{% url 'coursetop_score' classes_obj.id %}"> 34 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 35 班级排名 36 </a> 37 </th> 38 <th> 39 {## ————————66PerfectCRM实现CRM课程作业排名————————#} 40 <a href="{% url 'coursetop_homework' classes_obj.id %}"> 41 {## ————————66PerfectCRM实现CRM课程作业排名————————#} 42 已交作业 43 </a> 44 </th> 45 <th>出勤次数</th> 46 <th>迟到次数</th> 47 <th>缺勤次数</th> 48 <th>早退次数</th> 49 </tr> 50 </thead> 51 52 53 <tbody> 54 {% for enroll_obj in enrollmentlist %} 55 <tr> 56 <td style="color: #ff0f00">{{ enroll_obj.id }}</td> 57 {# 学员id#} 58 <td>{{ enroll_obj.customer.name }}</td> 59 {# 学员姓名#} 60 <td>{{ enroll_obj.customer.qq }}</td> 61 {# 学员QQ#} 62 <td>{{ enroll_obj.date }}</td> 63 {# 报名日期#} 64 <td> 65 {% fetch_stu_course_score class_grade_dic enroll_obj.id %} {# 得到 学员 课程 分数#} 66 </td> 67 <td> 68 {% get_stu_grade_ranking ranking_dic enroll_obj.id %} {# 得到 学员 课程 排名#} 69 </td> 70 <td> 71 {% get_already_homework enroll_obj.id %}{# 已交作业#} 72 </td> 73 <td> 74 {% get_stu_attendance enroll_obj.id %} {# 得到 学员出勤次数#} 75 </td> 76 <td> 77 {% get_stu_late enroll_obj.id %} {# 得到 学员出勤次数#} 78 </td> 79 <td> 80 {% get_stu_absenteeism enroll_obj.id %} {# 得到 学员出勤次数#} 81 </td> 82 <td> 83 {% get_stu_early enroll_obj.id %} {# 得到 学员早退次数#} 84 </td> 85 </tr> 86 {% endfor %} 87 </tbody> 88 </table> 89 </div> 90 </div> 91 </div> 92 {% endblock %} 93 {## ————————64PerfectCRM实现CRM课程排名详情————————#}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 {#coursetop_score.html#} 2 {## ————————65PerfectCRM实现CRM课程分数排名————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% load coursetop_tags %} 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 6 <div class="panel-default"> 7 <div class="panel-default"> 8 <div class="panel-body"> 9 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 10 讲师QQ:{{ request.user.stu_account }} </h4> 11 <ol class="breadcrumb"> 12 <li><a href="{% url 'teacher_class' %}">我的班级</a></li> 13 <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li> 14 <li><a href="{% url 'coursetop_score' classes_obj.id %}">分数排名</a></li> 15 </ol> 16 <table class="table table-striped table-responsive"> 17 <thead> 18 <tr> 19 <th><a href="{% url 'coursetop_details' classes_obj.id %}">学员ID</a></th> 20 <th><a target="_blank" href="/king_admin/crm/enrollment/?enrolled_class={{ class_id }}">学员姓名</a> 21 </th> 22 <th>学员QQ</th> 23 <th>报名日期</th> 24 <th>课程成绩</th> 25 <th>班级排名</th> 26 <th> 27 {## ————————66PerfectCRM实现CRM课程作业排名————————#} 28 <a href="{% url 'coursetop_homework' classes_obj.id %}"> 29 {## ————————66PerfectCRM实现CRM课程作业排名————————#} 30 已交作业 31 </a> 32 </th> 33 <th>出勤次数</th> 34 <th>迟到次数</th> 35 <th>缺勤次数</th> 36 <th>早退次数</th> 37 </tr> 38 </thead> 39 40 41 <tbody> 42 {% for enroll_objs in lists %} 43 {% for top,enroll_obj in enroll_objs.items %}{#分离提取K,V#[{排名: (学员ID, 分数)}]#} 44 {% id_enrollment enroll_obj.0 as enrollment %}{#enroll_obj.0 #学员ID#}{#通过学员ID查06学员报名信息表#} 45 <tr> 46 <td>{{ enroll_obj.0 }}</td> 47 {#学员ID#} 48 <td>{{ enrollment.customer.name }}</td> 49 {#学员姓名#} 50 <td>{{ enrollment.customer.qq }}</td> 51 {#学员QQ#} 52 <td>{{ enrollment.date }}</td> 53 {#报名日期#} 54 <td style="color: #ff0f00"> {{ enroll_obj.1 }}{#课程成绩#} </td> 55 <td style="color: #ff0f00"> 56 {{ top }}{#班级排名#} 57 </td> 58 <td>{% get_already_homework enroll_obj.0 %}</td> 59 {#已交作业#} 60 <td> 61 {% get_stu_attendance enroll_obj.0 %}{#出勤次数#} 62 </td> 63 <td> 64 {% get_stu_late enroll_obj.0 %}{#迟到次数#} 65 </td> 66 <td> 67 {% get_stu_absenteeism enroll_obj.0 %}{#缺勤次数#} 68 </td> 69 <td> 70 {% get_stu_early enroll_obj.0 %}{#早退次数#} 71 </td> 72 </tr> 73 {% endfor %} 74 {% endfor %} 75 </tbody> 76 </table> 77 </div> 78 </div> 79 </div> 80 {% endblock %} 81 {## ————————65PerfectCRM实现CRM课程分数排名————————#}