CRM需求分析

随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现在企业与客户之间的业务和企业内部之前部门之间的业务。因此CRM客户关系管理系统不但可以记录企业自内部信息,对于客户信息存储也是可以做到的,其中还涉及市场竞争对手的情报资料,还包括了企业进行营销、销售及支持服务所需的各种数据。

功能实现
(1)建议统一的信息编码系统;
(2)设计能够良好反映事物特性的数据模型;
(3)划分数据库管理,在分布式数据库管理系统和网络平台基础上,涉及全局共享及局部共享数据库,以支持分布式数据处理,实现各分系统之间及其内部各功能模块之间的信息集成。
(4)提供强大的数据库管理系统,并在此基础上增加拿过来的完善的客户销售数据库、客户市场数据库、客户支持与服务数据库、企业综合信息数据库等。
CRM客户关系管理系统的管理理念始终是以客户为中心的,不同的管理系统有着自己不同的数据处理方式,因此企业在构建自己的客户关系管理数据库时需要注意系统的特性和其他企业管理软件的协调。
对于中小型企业在客户关系管理系统上的应用,可有助于企业对客户信息管理混乱状态的改善,加强了企业和客户之间的联系,因此下面是中小企业在面对客户关系管理系统时所需的需求:
(1)因为是小型企业,系统将只设系统管理员,管理员拥有对企业全部系统资料的操作权限。
(2)客户管理模块,基本资料的添加、修改、删除和查询功能;与客户相关的联系人资料的添加、修改、删除和查询功能。另外,当查询到需要信息的时候,系统应提供报表和打印功能,以供公司领导作出决策。
(3)客户销售管理模块,有基本的添加、修改、删除和查询功能。其目标是提高客户销售数据的准确性、及时性和完整性,对客户销售进行有效管理,提供决策支持所需的数据。
(4)服务反馈模块,有基本的添加、修改、删除和查询功能,其目标是及时记录客户反馈的信息,提供有竞争力的售后支持、修理和维护服务
模型分析:

好了 开始写项目吧!
首先创建django项目:
环境:Python3
工具: pycharm
用到的插件:jquery bootsharp
  • 创建项目:
  • 根据关系编写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

models.py

  • 关于django class Meta 解释以及其他设置

  • 注册数据表
crm/admin.py

1 from django.contrib import admin 2 from crm import models 3 4 admin.site.register(models.Customer) 5 admin.site.register(models.CustomerFollowUp) 6 admin.site.register(models.Enrollment) 7 admin.site.register(models.Course) 8 admin.site.register(models.ClassList) 9 admin.site.register(models.CourseRecord) 10 admin.site.register(models.Branch) 11 admin.site.register(models.Role) 12 admin.site.register(models.Payment) 13 admin.site.register(models.StudyRecord) 14 admin.site.register(models.Tag) 15 admin.site.register(models.UserProfile) 16 admin.site.register(models.Menu)

View Code

Python manage.py makemigrations python manage.py migrate

C:\Users\MrTong\Desktop\django\EasyCRM>Python manage.py makemigrations
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.
Migrations for 'crm':crm\migrations\0001_initial.py- Create model Branch- Create model ClassList- Create model Course- Create model CourseRecord- Create model Customer- Create model CustomerFollowUp- Create model Enrollment- Create model Menu- Create model Payment- Create model Role- Create model StudyRecord- Create model Tag- Create model UserProfile- Add field consultant to payment- Add field course to payment- Add field customer to payment- Add field consultant to enrollment- Add field customer to enrollment- Add field enrolled_class to enrollment- Add field consultant to customerfollowup- Add field customer to customerfollowup- Add field consultant to customer- Add field tags to customer- Add field teacher to courserecord- Add field course to classlist- Add field teachers to classlist- Alter unique_together for studyrecord (1 constraint(s))- Alter unique_together for enrollment (1 constraint(s))- Alter unique_together for courserecord (1 constraint(s))- Alter unique_together for classlist (1 constraint(s))
C:\Users\MrTong\Desktop\django\EasyCRM>Python manage.py migrate
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.
Operations to perform:Apply all migrations: admin, auth, contenttypes, crm, sessions
Running migrations:Applying contenttypes.0001_initial... OKApplying auth.0001_initial... OKApplying admin.0001_initial... OKApplying admin.0002_logentry_remove_auto_add... OKApplying contenttypes.0002_remove_content_type_name... OKApplying auth.0002_alter_permission_name_max_length... OKApplying auth.0003_alter_user_email_max_length... OKApplying auth.0004_alter_user_username_opts... OKApplying auth.0005_alter_user_last_login_null... OKApplying auth.0006_require_contenttypes_0002... OKApplying auth.0007_alter_validators_add_error_messages... OKApplying auth.0008_alter_user_username_max_length... OKApplying crm.0001_initial... OKApplying sessions.0001_initial... OK

生成数据表

  • 创建管理用户 (密码不能纯数字)

    Python 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吧

  • 接下来创建几条数据吧!

数据创建完成了,但是我们发现了一个问题,我们创建了那么多字段为什么只而admin只显示了主键字段,这样的话查看数据就非常的不方便,因此我们就需要对admin进行定制了!
我们继续修改crm/admin.py

class CustomerAdmin(admin.ModelAdmin):list_display = ('id','qq','source','consultant','content','status','date')list_filter = ('source','consultant','date')search_fields = ('qq','name')raw_id_fields = ('consult_course',)filter_horizontal = ('tags',)list_editable = ('status',)
class UserProfileAdmin(admin.ModelAdmin):list_display = ('user','name')
admin.site.register(models.Customer,CustomerAdmin)
admin.site.register(models.UserProfile,UserProfileAdmin)

admin.py

效果显而易见 

编写自己的admin 管理系统

转载于:https://www.cnblogs.com/tongchengbin/p/7672952.html

Django CRM客户关系管理系统相关推荐

  1. Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)

    源码获取:博客首页 "资源" 里下载! Springboot项目CRM客户关系管理系统: 系统实现了CRM客户关系系统的基本功能,主要有看板(当月参与的业务机会.当月转化情况.将要 ...

  2. Myesclipe+SSH+jsp+mysql+tomcate实现一个简单的CRM客户关系管理系统

    导读: CRM客户关系管理系统的目的通过客户管理,产品管理,系统管理等功能同客户建立联并收集客户信息,此基础上满足客户"一对一"个性化服务.同时信息在企业的流程上得以流转,让客户得 ...

  3. 前端做CRM管理系统是做什么_代办行业的CRM客户关系管理系统应该是什么样子的?...

    随着互联网的深耕细化,很多企业也在不断优化自己的办公方式,以优化企业的办公流程,提高企业的办事效率.因此实现办公自动化,或者说实现数字化办公就需要逐渐提上日程. 今天给大家讲讲可以帮助代办行业实现办公 ...

  4. crm客户管理系统源码_公司crm客户关系管理系统的功能

    企业的最终目标是服务好客户,赢得客户的青睐.为了实现这一目标,除了扎实的产品和优秀的团队,我们还必须选择科学的管理体系来帮助企业实现这一最终目标.这个系统就是公司crm客户关系管理系统,点镜SCRM公 ...

  5. 保险行业CRM客户关系管理系统解决方案

    近几年保险行业进入快速发展的阶段,各类保险产品引领各类广大市场.不过也是一个具有经营风险的金融行业,业内人士认为在借助保险行业CRM客户关系管理系统可以大大的把握住客户关系,有助于保险行业的风险管理机 ...

  6. JAVA+SSM+MySql CRM客户关系管理系统(附带源码)

    一.前言 利用软件.硬件和网络技术,为企业建立一个客户信息收集.管理.分析和利用的信息系统.以客户数据的管理为核心,记录企业在市场营销和销售过程中和客户发生的各种交互行为,以及各类有关活动的状态,提供 ...

  7. CRM客户关系管理系统源码

    项目介绍: 这是一个基于Springboot+MySql实现的CRM客户关系管理系统. 技术特点: SpringBoot+MyBatis+Maven+Jquery+Bootstrap 推荐环境配置: ...

  8. 开源项目-CRM客户关系管理系统

    哈喽,大家好,今天给大家带来一个开源系统-CRM客户关系管理系统 主要功能包括客户管理,客户流失,销售机会,客户关怀等模块 系统开发环境以及版本 操作系统: Windows_7 集成开发工具: Ecl ...

  9. Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程

    客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...

最新文章

  1. 基于SSH实现健身俱乐部管理系统
  2. 动态生成的DIV加上DWZ后如何分页的问题
  3. spring aop切面中获取代理bean的名字以及bean
  4. 新闻发布项目——业务逻辑层(UserService)
  5. echarts中triggeron与trigger不能同时出现吗_好物|痛风、血糖高、虚不受补能吃它吗?你想知道的阿胶十问十答一锅出!...
  6. 二分的思想在算法中体现
  7. 【杂项】2020年年度报告
  8. html5 在新标签页打开,Chrome,Javascript,window。在新标签页中打开
  9. 斐波那契字符串_KMP
  10. Caffe学习:Layers
  11. 矩阵键盘消抖 c语言,按键消抖,矩阵键盘原理和矩阵键盘的仿真模型
  12. 魔兽、星际和红警的比较
  13. 杂谈随想第002篇:博客访问量破万的想法
  14. 影集制作php源码_php 源码编译
  15. 泰康人寿付刚:IT规划 SOA是目标
  16. keep 虚拟路线修改器_Keep 动感单车体验:每天半小时,离瘦更近一步
  17. 俄语转化成拉丁字母java_java - 如何在Java String中将西里尔字母转换为英语拉丁语? - SO中文参考 - www.soinside.com...
  18. 解决pytesseract.pytesseract.TesseractError: (1, ‘Error opening data file C:\\Program Files\\Tesseract-
  19. 孩子到底是食物过敏?还是食物不耐受?
  20. 计算机老师新年贺卡祝福语,新年贺卡祝老师祝福语精选

热门文章

  1. stm32f103RCT 使用ssd1306 IIC 接口 移植lkdGUI
  2. 只网签没备案 房管局能查到吗_房管局备案_如何查询是否已经备案
  3. Java 苹果消息推送
  4. solr 基础查询语法
  5. BI家族又添新军 用户该如何选择??
  6. 关于Web的学习(18.5.30)——javascript篇
  7. 小偷写给失主的信(爆笑)
  8. 安鸾渗透实战平台(cms系列)wordpress01 (200分)
  9. 学校计算机及班班通工作责任书,班班通管理使用责任书
  10. 企业战略的作用有哪些?