学员管理
# 学生管理
Student学生表的 查看修改
需求如下:
1> 学生的添加只能通过销售的渠道进行转换,在这里不能随便添加. 所以添加的功能没有!
2> 学生的删除要慎重,所以删除的功能没有!
3> 学生的编辑, 客户信息/属于哪个客户、已报班级、学员状态 字段是不能任意随便做修改的!
4> 添加模糊搜索和组合搜索
1
2
3
4
2
3
4
关键代码如下:
# 积分管理
(*≧ω≦)
# 积分记录表
哪个学生因为什么加分了还是扣分了,执行人是谁!!
表设计如下:
class Student(models.Model):
""" 学生表 """
customer = models.OneToOneField(verbose_name='客户信息', to='Customer', on_delete=models.CASCADE)
# 客户表里那里的信息可能是乱填的;而在学生表这,qq、手机号这些得是真实的!
qq = models.CharField(verbose_name='QQ号', max_length=32)
mobile = models.CharField(verbose_name='手机号', max_length=32)
emergency_contract = models.CharField(verbose_name='紧急联系人电话', max_length=32)
# n:n 一个学员可以报很多个班级
class_list = models.ManyToManyField(verbose_name="已报班级", to='ClassList', blank=True)
student_status_choices = [
(1, "申请中"),
(2, "在读"),
(3, "毕业"),
(4, "退学")
]
student_status = models.IntegerField(verbose_name="学员状态", choices=student_status_choices, default=1)
score = models.IntegerField(verbose_name='积分', default=100) # ★★★
memo = models.TextField(verbose_name='备注', max_length=255, blank=True, null=True)
def __str__(self):
return self.customer.name
class ScoreRecord(models.Model):
""" 积分记录 哪个学生因为什么加分了还是扣分了,执行人是谁 """
student = models.ForeignKey(verbose_name='学生', to='Student', on_delete=models.CASCADE)
content = models.TextField(verbose_name='理由')
score = models.IntegerField(verbose_name='分值', help_text='违纪扣分写负值,表现邮寄加分写正值')
user = models.ForeignKey(verbose_name='执行人', to='UserInfo', on_delete=models.CASCADE)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 记录查看和新增
对积分记录进行查看和新增!!
需求分析如下:
1> 学生列表添加一列"积分记录"!
该积分可以点击,渲染的url地址会携带当前学生的id, 点击后跳转到该学生的积分记录页面.(类似于客户的跟进记录
2> 查看该学生的积分记录. So,需要通过重写get_queryset进行筛选!
在该方法中拿到url中该学生的id,然后去学生记录表中筛选属于该学生的积分记录.
3> 积分是不能进行编辑和删除的!只有添加和查看.
4> 添加积分记录时, 当前学生、执行人都不能编辑,在save中处理即可!! ModelForm + save
save里的逻辑处理积分,涉及到两张表,学生表里的积分和积分记录里的积分!!
1
2
3
4
5
6
7
2
3
4
5
6
7
关键代码如下: (跟客户的跟进记录大同小异
# 上课记录
Bingo!
- 上课记录表
- 班级表格里多一列,点击可查看这个班的上课记录 跟那什么"跟进记录"、"缴费记录"、"积分记录"等一样的.
- 点击跳转过去时,一定要携带班级ID,So:
- 上课记录相关的CURD的url不能用默认的,要修改下
- 上课记录表格中,不应该是所有的上课记录,应该是该班级的上课记录
- 上课记录表的 新增
- 新增时,班级是不用填的!!
至于新增、更新、删除时,手动修改url上的参数,对此的预防. 暂时没有必要,看需求吧!!细品.
■ 待优化: 每个班级不都设置了有哪些任课教师嘛?那么在对这个班级进行添加记录字段时,讲师字段的选择只能从已经设置好的任课教师中选!!
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 考勤记录
为班级的每条上课记录都应生成n条考勤记录(0<=n<=该班级的人数) 考勤的状态--已签到/请假/迟到/缺勤/早退
# 批量初始化考勤记录
找到该条上课记录所在的班级的所有学员,初始化批量生成学生的考勤记录!!(省去了为学员一个个添加考勤记录的繁琐过程.
初始的考勤状态都是 已签到!!
在批量操作按钮中做了一系列的判断!! 详见截图.. 就不过多进行阐述啦.
# 批量设置考勤记录
在上面我们批量初始化了考勤记录, 它们的考勤状态初始都是"已考勤", 我们可以进行批量修改!
我们在上课记录表格里添加"考勤记录"一列,点击它,显示该记录所在班级所有学生的考勤记录..
并且这些考勤记录是可以被修改的. 修改后,可以批量提交!! -- 类似于rbac组件里利用formset批量进行权限操作的功能
(此处我们没用formset,使用的是modelformset!!)
1
2
3
2
3