/ 2019-04-19
3. 客户跟进表,这张表的意义很容易理解, 一个客户今天咨询后,你录入到了客户信息表,但他没报名, 所以过了一段时间,销售还得再跟他聊聊吧,聊完后,结果又没报,那也得纪录下来吧,因为每个销售每天要聊很多人,你不纪录的话, 可能下次再跟这个人聊时,你早已忘记上次聊了什么了, 这样会让客户觉得这个销售不专业,相反,如果把每次跟进的内容都纪录下来, 过了几个月,这个客户再跟你聊时,竟然发现,你还记得他的所有情况,他就觉得你很重视他,说不定一感动就报名了,哈哈。 所以,一条客户信息可能会对应多条跟进记录,是个1对多的关系,必须单独搞张表来记录
class CustomerFollowUp(models.Model):
'''存储客户的后续跟进信息'''
customer = models.ForeignKey(Customer,verbose_name=u"所咨询客户")
note = models.TextField(u"跟进内容...")
status_choices = ((1,u"近期无报名计划"),
(2,u"2个月内报名"),
(3,u"1个月内报名"),
(4,u"2周内报名"),
(5,u"1周内报名"),
(6,u"2天内报名"),
(7,u"已报名"),
(8,u"已交全款"),
)
status = models.IntegerField(u"状态",choices=status_choices,help_text=u"选择客户此时的状态")
consultant = models.ForeignKey("UserProfile",verbose_name=u"跟踪人")
date = models.DateField(u"跟进日期",auto_now_add=True)
def __str__(self):
return u"%s, %s" %(self.customer,self.status)
class Meta:
verbose_name = u'客户咨询跟进记录'
verbose_name_plural = u"客户咨询跟进记录"
CustomerFollowUp
4. 班级表, 学生以班级为单位管理,这个表被学员表反向关联, 即每个学员报名时需要选择班级
class ClassList(models.Model):
'''存储班级信息'''
#创建班级时需要选择这个班所学的课程
branch = models.ForeignKey("Branch",verbose_name="校区")
course = models.ForeignKey("Course",verbose_name=u"课程")
class_type_choices = ((0,'面授'),(1,'随到随学网络'))
class_type = models.SmallIntegerField(choices=class_type_choices,default=0)
total_class_nums = models.PositiveIntegerField("课程总节次",default=10)
semester = models.IntegerField(u"学期")
price = models.IntegerField(u"学费", default=10000)
start_date = models.DateField(u"开班日期")
graduate_date = models.DateField(u"结业日期", blank=True, null=True)
#选择这个班包括的讲师,可以是多个
teachers = models.ManyToManyField("UserProfile", verbose_name=u"讲师")
def __str__(self):
return "%s(%s)" % (self.course, self.semester)
class Meta:
verbose_name = u'班级列表'
verbose_name_plural = u"班级列表"
#为避免重复创建班级,课程名+学期做联合唯一
unique_together = ("course", "semester")
#自定义方法,反向查找每个班级学员的数量,在后台admin里 list_display加上这个"get_student_num"就可以看到
def get_student_num(self):
return "%s" % self.customer_set.select_related().count()
get_student_num.short_description = u'学员数量'
ClassList
5. 课程表,存储课程介绍\大纲等基本信息
class Course(models.Model):
'''存储所开设课程的信息'''
name = models.CharField(u"课程名",max_length=64,unique=True)
description = models.TextField("课程描述")
outline = models.TextField("课程大纲")
period = models.IntegerField("课程周期(Month)")
def __str__(self):
return self.name
Course
6. 上课纪录表,每个班级都要上很多次课,讲师每上一次课的纪录都要纪录下来,以后可以方便统计讲师工资什么的
class CourseRecord(models.Model):
'''存储各班级的上课记录'''
#讲师创建上课纪录时要选择是上哪个班的课
course = models.ForeignKey(ClassList, verbose_name="班级(课程)")
day_num = models.IntegerField("节次", help_text="此处填写第几节课或第几天课程...,必须为数字")
date = models.DateField(auto_now_add=True, verbose_name="上课日期")
teacher = models.ForeignKey("UserProfile", verbose_name="讲师")
has_homework = models.BooleanField(default=True, verbose_name="本节有作业")
homework_title = models.CharField(max_length=128,blank=True,null=True)
homework_requirement = models.TextField(blank=True,null=True)
def __str__(self):
return "%s 第%s天" % (self.course, self.day_num)
class Meta:
verbose_name = u'上课纪录'
verbose_name_plural = u"上课纪录"
unique_together = ('course', 'day_num')
CourseRecord
7. 学员学习纪录表,思考一下,如果你想实现纪录每位学员的详细学习纪录,即精确到每节课的成绩\出勤情况,怎么办?其实很简单, 先来看一下此时班级\上课纪录\学员学习纪录的关系图:
class StudyRecord(models.Model):
'''存储所有学员的详细的学习成绩情况'''
student = models.ForeignKey("Customer",verbose_name=u"学员")
course_record = models.ForeignKey(CourseRecord, verbose_name=u"第几天课程")
record_choices = (('checked', u"已签到"),
('late',u"迟到"),
('noshow',u"缺勤"),
('leave_early',u"早退"),
)
record = models.CharField(u"上课纪录",choices=record_choices,default="checked",max_length=64)
score_choices = ((100, 'A+'), (90,'A'),
(85,'B+'), (80,'B'),
(70,'B-'), (60,'C+'),
(50,'C'), (40,'C-'),
(-50,'D'), (0,'N/A'),
(-100,'COPY'), (-1000,'FAIL'),
)
score = models.IntegerField(u"本节成绩",choices=score_choices,default=-1)
date = models.DateTimeField(auto_now_add=True)
note = models.CharField(u"备注",max_length=255,blank=True,null=True)
def __str__(self):
return u"%s,学员:%s,纪录:%s, 成绩:%s" %(self.course_record,self.student.name,self.record,self.get_score_display())
class Meta:
verbose_name = u'学员学习纪录'
verbose_name_plural = u"学员学习纪录"
#一个学员,在同一节课只可能出现一次,所以这里把course_record + student 做成联合唯一
unique_together = ('course_record','student')
StudyRecord
可以看出,一个班级对应多节课,每节课又对应多个学生的出勤和成绩,我们已经通过班级表(”ClassList”)和上课纪录表(”CourseRecord”)存储了班级信息和每节上课纪录,想存学生的每节课学习纪录的话只需要再搞一个表就可以了。
(4)