• Django项目:CRM(客户关系管理系统)--75--65PerfectCRM实现CRM课程分数排名


     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 ]
    13 # ————————64PerfectCRM实现CRM课程排名详情————————
    # classtop_urls.py

     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课程分数排名————————
    # coursetop_views.py

     1 # coursetop_tags.py
     2 # ————————64PerfectCRM实现CRM课程排名详情————————
     3 from crm import models
     4 from django import template
     5 register = template.Library()
     6 
     7 @register.simple_tag
     8 def fetch_stu_course_score(class_grade_dic, enroll_obj_id ): #获取 学员 课程 分数
     9     score=class_grade_dic.get(enroll_obj_id) #根据 id 找对应的分数
    10     # print('#{学员ID:分数} #全班成绩',score)
    11     return score
    12 
    13 @register.simple_tag
    14 def get_stu_grade_ranking(course_ranking_dic,enroll_obj_id):#得到 学员 班级 排名
    15     score_top = course_ranking_dic.get(enroll_obj_id) #根据id 找对应的排名
    16     if score_top:
    17         # print( '#{学员ID: [分数, 排名] } #全班排名:', score_top[1] )
    18         return score_top[1]
    19 
    20 @register.simple_tag
    21 def get_already_homework(enroll_obj_id): #获得已交作业
    22     score_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('score')#根据09学习纪录的ID #获取学习成绩列表
    23     number=0
    24     for score in score_list:
    25         if score!= (0,) :
    26             number += 1
    27     # print('已交作业次数',number)
    28     return number
    29 
    30 
    31 @register.simple_tag
    32 def get_stu_attendance(enroll_obj_id): #获得学员出勤次数
    33     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
    34     number=0
    35     for attendance in attendance_list:
    36         if attendance == (0,) :
    37             number += 1
    38     # print('获得点名出勤',number)
    39     return number
    40 
    41 @register.simple_tag
    42 def get_stu_late(enroll_obj_id): #获得学员迟到次数
    43     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
    44     number=0
    45     for attendance in attendance_list:
    46         if attendance == (1,) :
    47             number += 1
    48     # print('获得点名迟到',number)
    49     return number
    50 
    51 @register.simple_tag
    52 def get_stu_absenteeism(enroll_obj_id): #获得学员缺勤次数
    53     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
    54     number=0
    55     for attendance in attendance_list:
    56         if attendance == (2,) :
    57             number += 1
    58     # print('获得点名缺勤',number)
    59     return number
    60 
    61 @register.simple_tag
    62 def get_stu_early(enroll_obj_id): #获得学员早退次数
    63     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
    64     number=0
    65     for attendance in attendance_list:
    66         if attendance == (3,) :
    67             number += 1
    68     # print('获得点名早退',number)
    69     return number
    70 # ————————64PerfectCRM实现CRM课程排名详情————————
    71 
    72 # ————————65PerfectCRM实现CRM课程分数排名————————
    73 @register.simple_tag
    74 def id_enrollment(enroll_obj):#ID查姓名
    75     enrollment = models.Enrollment.objects.filter(id=enroll_obj).first()#通过学员ID查06学员报名信息表
    76     return enrollment #06学员报名信息表
    77 # ————————65PerfectCRM实现CRM课程分数排名————————
    # coursetop_tags.py

     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>已交作业</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 style="color: #ff0f00"> {{ enroll_obj.1 }}{#课程成绩#} </td>
    49                                 <td style="color: #ff0f00">
    50                                     {{ top }}{#班级排名#}
    51                                 </td>
    52                                 <td>{% get_already_homework enroll_obj.0 %}</td>
    53                                 {#已交作业#}
    54                                 <td>
    55                                     {% get_stu_attendance enroll_obj.0 %}{#出勤次数#}
    56                                 </td>
    57                                 <td>
    58                                     {% get_stu_late enroll_obj.0 %}{#迟到次数#}
    59                                 </td>
    60                                 <td>
    61                                     {% get_stu_absenteeism enroll_obj.0 %}{#缺勤次数#}
    62                                 </td>
    63                                 <td>
    64                                     {% get_stu_early enroll_obj.0 %}{#早退次数#}
    65                                 </td>
    66                             </tr>
    67                         {% endfor %}
    68                     {% endfor %}
    69                     </tbody>
    70                 </table>
    71             </div>
    72         </div>
    73     </div>
    74 {% endblock %}
    75 {## ————————65PerfectCRM实现CRM课程分数排名————————#}
    {#coursetop_score.html#}

     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>已交作业</th>
    39                         <th>出勤次数</th>
    40                         <th>迟到次数</th>
    41                         <th>缺勤次数</th>
    42                         <th>早退次数</th>
    43                     </tr>
    44                     </thead>
    45 
    46 
    47                     <tbody>
    48                     {% for enroll_obj  in  enrollmentlist %}
    49                         <tr>
    50                             <td style="color: #ff0f00">{{ enroll_obj.id }}</td>
    51                             {# 学员id#}
    52                             <td>{{ enroll_obj.customer.name }}</td>
    53                             {# 学员姓名#}
    54                             <td>{{ enroll_obj.customer.qq }}</td>
    55                             {# 学员QQ#}
    56                             <td>{{ enroll_obj.date }}</td>
    57                             {# 报名日期#}
    58                             <td>
    59                                 {% fetch_stu_course_score class_grade_dic enroll_obj.id %} {# 得到 学员 课程 分数#}
    60                             </td>
    61                             <td>
    62                                 {% get_stu_grade_ranking ranking_dic enroll_obj.id %} {# 得到 学员 课程 排名#}
    63                             </td>
    64                             <td>
    65                                 {% get_already_homework enroll_obj.id %}{# 已交作业#}
    66                             </td>
    67                             <td>
    68                                 {% get_stu_attendance enroll_obj.id %} {# 得到 学员出勤次数#}
    69                             </td>
    70                             <td>
    71                                 {% get_stu_late enroll_obj.id %} {# 得到 学员出勤次数#}
    72                             </td>
    73                             <td>
    74                                 {% get_stu_absenteeism enroll_obj.id %} {# 得到 学员出勤次数#}
    75                             </td>
    76                             <td>
    77                                 {% get_stu_early enroll_obj.id %} {# 得到 学员早退次数#}
    78                             </td>
    79                         </tr>
    80                     {% endfor %}
    81                     </tbody>
    82                 </table>
    83             </div>
    84         </div>
    85     </div>
    86 {% endblock %}
    87 {## ————————64PerfectCRM实现CRM课程排名详情————————#}
    {#coursetop_details.html#}

  • 相关阅读:
    selenium实战
    selenium+unittest实现po模型
    IDE自动化脚本实现
    web 自动化测试
    requests 遇到报错UnicodeEncodeError: 'latin-1' codec can't encode character 'u86c7' in position 8: Body ('蛇') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.
    通过requests + pytest + allure 实现接口自动化测试
    python pytest单元测试
    python unittest单元测试
    laili和网路知识
    网络-单臂路由
  • 原文地址:https://www.cnblogs.com/ujq3/p/9034052.html
Copyright © 2020-2023  润新知