CRM需求分析
随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现在企业与客户之间的业务和企业内部之前部门之间的业务。因此CRM客户关系管理系统不但可以记录企业自内部信息,对于客户信息存储也是可以做到的,其中还涉及市场竞争对手的情报资料,还包括了企业进行营销、销售及支持服务所需的各种数据。
- 创建项目:
- 根据关系编写model 认证方式继承于django自带认证from django.contrib.auth.models import User
1 from django.db import models 2 from django.contrib.auth.models import User 3 # Create your models here. 4 5 6 class Customer(models.Model): 7 \'\'\'客户信息表\'\'\' 8 name = models.CharField(max_length=32,blank=True,null=True) 9 qq = models.CharField(max_length=64,unique=True) 10 qq_name = models.CharField(max_length=64,blank=True,null=True) 11 phone = models.CharField(max_length=64,blank=True,null=True) 12 source_choices = ((0,\'转介绍\'), 13 (1,\'QQ群\'), 14 (2,\'官网\'), 15 (3,\'百度推广\'), 16 (4,\'51CTO\'), 17 (5,\'知乎\'), 18 (6,\'市场推广\') 19 ) 20 21 source = models.SmallIntegerField(choices=source_choices) 22 referral_from = models.CharField(verbose_name="转介绍人qq",max_length=64,blank=True,null=True) 23 24 consult_course = models.ForeignKey("Course",verbose_name="咨询课程") 25 content = models.TextField(verbose_name="咨询详情") 26 tags = models.ManyToManyField("Tag",blank=True,null=True) 27 status_choices = ((0,\'已报名\'), 28 (1,\'未报名\'), 29 ) 30 status = models.SmallIntegerField(choices=status_choices,default=1) 31 consultant = models.ForeignKey("UserProfile") 32 memo = models.TextField(blank=True,null=True) 33 date = models.DateTimeField(auto_now_add=True) 34 35 def __str__(self): 36 return self.qq 37 38 class Meta: 39 verbose_name ="客户表" 40 verbose_name_plural ="客户表" 41 42 class Tag(models.Model): 43 name = models.CharField(unique=True,max_length=32) 44 45 def __str__(self): 46 return self.name 47 48 class Meta: 49 verbose_name = "标签" 50 verbose_name_plural = "标签" 51 52 class CustomerFollowUp(models.Model): 53 \'\'\'客户跟进表\'\'\' 54 customer = models.ForeignKey("Customer") 55 content = models.TextField(verbose_name="跟进内容") 56 consultant = models.ForeignKey("UserProfile") 57 58 intention_choices = ((0,\'2周内报名\'), 59 (1,\'1个月内报名\'), 60 (2,\'近期无报名计划\'), 61 (3,\'已在其它机构报名\'), 62 (4,\'已报名\'), 63 (5,\'已拉黑\'), 64 ) 65 intention = models.SmallIntegerField(choices=intention_choices) 66 date = models.DateTimeField(auto_now_add=True) 67 68 def __str__(self): 69 return "<%s : %s>" %(self.customer.qq,self.intention) 70 71 72 class Meta: 73 verbose_name = "客户跟进记录" 74 verbose_name_plural = "客户跟进记录" 75 76 class Course(models.Model): 77 \'\'\'课程表\'\'\' 78 name = models.CharField(max_length=64,unique=True) 79 price = models.PositiveSmallIntegerField() 80 period = models.PositiveSmallIntegerField(verbose_name="周期(月)") 81 outline = models.TextField() 82 83 def __str__(self): 84 return self.name 85 86 class Meta: 87 verbose_name = "课程表" 88 verbose_name_plural = "课程表" 89 90 class Branch(models.Model): 91 \'\'\'校区\'\'\' 92 name = models.CharField(max_length=128,unique=True) 93 addr = models.CharField(max_length=128) 94 def __str__(self): 95 return self.name 96 97 98 class Meta: 99 verbose_name = "校区" 100 verbose_name_plural = "校区" 101 102 class ClassList(models.Model): 103 \'\'\'班级表\'\'\' 104 branch = models.ForeignKey("Branch",verbose_name="校区") 105 course = models.ForeignKey("Course") 106 class_type_choices = ((0,\'面授(脱产)\'), 107 (1,\'面授(周末)\'), 108 (2,\'网络班\') 109 ) 110 class_type = models.SmallIntegerField(choices=class_type_choices,verbose_name="班级类型") 111 semester = models.PositiveSmallIntegerField(verbose_name="学期") 112 teachers = models.ManyToManyField("UserProfile") 113 start_date = models.DateField(verbose_name="开班日期") 114 end_date = models.DateField(verbose_name="结业日期",blank=True,null=True) 115 116 def __str__(self): 117 return "%s %s %s" %(self.branch,self.course,self.semester) 118 119 class Meta: 120 unique_together = (\'branch\',\'course\',\'semester\') 121 verbose_name_plural = "班级" 122 verbose_name = "班级" 123 124 class CourseRecord(models.Model): 125 \'\'\'上课记录\'\'\' 126 from_class = models.ForeignKey("ClassList",verbose_name="班级") 127 day_num = models.PositiveSmallIntegerField(verbose_name="第几节(天)") 128 teacher = models.ForeignKey("UserProfile") 129 has_homework = models.BooleanField(default=True) 130 homework_title = models.CharField(max_length=128,blank=True,null=True) 131 homework_content = models.TextField(blank=True,null=True) 132 outline = models.TextField(verbose_name="本节课程大纲") 133 date = models.DateField(auto_now_add=True) 134 135 def __str__(self): 136 return "%s %s" %(self.from_class,self.day_num) 137 138 class Meta: 139 unique_together = ("from_class", "day_num") 140 verbose_name_plural = "上课记录" 141 142 143 class StudyRecord(models.Model): 144 \'\'\'学习记录\'\'\' 145 student = models.ForeignKey("Enrollment") 146 course_record = models.ForeignKey("CourseRecord") 147 attendance_choices = ((0,\'已签到\'), 148 (1,\'迟到\'), 149 (2,\'缺勤\'), 150 (3,\'早退\'), 151 ) 152 attendance = models.SmallIntegerField(choices=attendance_choices,default=0) 153 score_choices = ((100,"A+"), 154 (90,"A"), 155 (85,"B+"), 156 (80,"B"), 157 (75,"B-"), 158 (70,"C+"), 159 (60,"C"), 160 (40,"C-"), 161 (-50,"D"), 162 (-100,"COPY"), 163 (0,"N/A"), 164 ) 165 score = models.SmallIntegerField(choices=score_choices,default=0) 166 memo = models.TextField(blank=True,null=True) 167 date = models.DateField(auto_now_add=True) 168 169 def __str__(self): 170 return "%s %s %s" %(self.student,self.course_record,self.score) 171 172 class Meta: 173 unique_together = (\'student\',\'course_record\') 174 verbose_name_plural = "学习记录" 175 176 177 class Enrollment(models.Model): 178 \'\'\'报名表\'\'\' 179 customer = models.ForeignKey("Customer") 180 enrolled_class = models.ForeignKey("ClassList",verbose_name="所报班级") 181 consultant = models.ForeignKey("UserProfile",verbose_name="课程顾问") 182 contract_agreed = models.BooleanField(default=False,verbose_name="学员已同意合同条款") 183 contract_approved = models.BooleanField(default=False,verbose_name="合同已审核") 184 date = models.DateTimeField(auto_now_add=True) 185 186 def __str__(self): 187 return "%s %s" %(self.customer,self.enrolled_class) 188 189 class Meta: 190 unique_together = ("customer","enrolled_class") 191 verbose_name_plural = "报名表" 192 193 class Payment(models.Model): 194 \'\'\'缴费记录\'\'\' 195 customer = models.ForeignKey("Customer") 196 course = models.ForeignKey("Course",verbose_name="所报课程") 197 amount = models.PositiveIntegerField(verbose_name="数额",default=500) 198 consultant = models.ForeignKey("UserProfile") 199 date = models.DateTimeField(auto_now_add=True) 200 201 def __str__(self): 202 return "%s %s" %(self.customer,self.amount) 203 204 class Meta: 205 verbose_name_plural = "缴费记录" 206 207 class UserProfile(models.Model): 208 \'\'\'账号表\'\'\' 209 user = models.OneToOneField(User) 210 name = models.CharField(max_length=32) 211 roles = models.ManyToManyField("Role",blank=True,null=True) 212 213 def __str__(self): 214 return self.name 215 216 class Role(models.Model): 217 \'\'\'角色表\'\'\' 218 name = models.CharField(max_length=32,unique=True) 219 menus = models.ManyToManyField("Menu",blank=True) 220 221 def __str__(self): 222 return self.name 223 class Meta: 224 verbose_name_plural = "角色" 225 226 227 class Menu(models.Model): 228 \'\'\'菜单\'\'\' 229 name = models.CharField(max_length=32) 230 url_name = models.CharField(max_length=64) 231 232 def __str__(self): 233 return self.name
- 注册数据表
1 from django.contrib import admin 2 from crm import models 3 4 admin.site.register(models.Customer) 5admin.site.register(models.CustomerFollowUp) 6 admin.site.register(models.Enrollment) 7admin.site.register(models.Course) 8 admin.site.register(models.ClassList) 9admin.site.register(models.CourseRecord) 10 admin.site.register(models.Branch) 11admin.site.register(models.Role) 12 admin.site.register(models.Payment) 13admin.site.register(models.StudyRecord) 14 admin.site.register(models.Tag) 15admin.site.register(models.UserProfile) 16 admin.site.register(models.Menu)
View Code
Python manage.py makemigrations python manage.py migrate
生成数据表
-
创建管理用户 (密码不能纯数字)
1Python manage.py createsuperuser
C:\\Users\\MrTong\\Desktop\\django\\EasyCRM>python manage.py createsuperuser System check identified some issues: WARNINGS: crm.Customer.tags: (fields.W340) null has no effect on ManyToManyField. crm.UserProfile.roles: (fields.W340) null has no effect on ManyToManyField. Username (leave blank to use \'mrtong\'): Email address: abc@qq.com Password: Password (again): Superuser created successfully.
- OK 先来登陆admin吧
- 接下来创建几条数据吧!
效果显而易见