老男孩python课程表_老男孩PythonDjango之路 -CRM开发表结构设计

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”)存储了班级信息和每节上课纪录,想存学生的每节课学习纪录的话只需要再搞一个表就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值