Django项目:CRM(客户关系管理系统)--02--01PerfectCRM基本配置ADMIN02
三.CRM项目表结构设计
from django.db import models # Create your models here.""" #运行 Terminal # 生成 数据表 # python manage.py makemigrations # 数据表 迁移 # python manage.py migrate """"""01校区表""" class Branch(models.Model):name = models.CharField(max_length=128,unique=True) #校区名#CharField作用是保存文本,定长的变量类型addr = models.CharField(max_length=128) #地址def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return self.name #返回 #校区名class Meta: #通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "01校区表" #verbose_name_plural给你的模型类起一个更可读的名字"""02班级表""" class ClassList(models.Model):#ForeignKey就是表与表之间的某种约定的关系 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。branch = models.ForeignKey("Branch",on_delete=models.CASCADE)#校区 关联到 校区表course = models.ForeignKey("Course",on_delete=models.CASCADE) #课程 关联到 课程表 class_type_choices = ( #上课形式(0,'面授(脱产)'),(1,'面授(周末)'),(2,'网络班'),)#PositiveSmallIntegerField正小整数 0 ~ 32767 #choices是Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作class_type = models.SmallIntegerField(choices=class_type_choices)#上课形式#PositiveSmallIntegerField正小整数 0 ~ 32767semester = models.PositiveSmallIntegerField(verbose_name="学期") #课程的第几期#ManyToManyField多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。teachers = models.ManyToManyField("UserProfile") # 老师 关联到 账号表 start_date = models.DateField(verbose_name="开班日期") #DateField 日期格式 YYYY-MM-DD #verbose_name是Admin中显示的字段名称# DateField 日期格式 YYYY-MM-DD #verbose_name是Admin中显示的字段名称 #Django可空#数据库可以为空end_date = models.DateField(verbose_name="结业日期",blank=True,null=True)def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return "%s %s %s" %(self.branch,self.course,self.semester) #返回 #%s格式化输出字符串 #校区#课程# 学期class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据unique_together=('branch','course','semester') #联合索引verbose_name_plural = "02班级表" #verbose_name_plural给你的模型类起一个更可读的名字"""03课程表,可以报名那些课程""" class Course(models.Model):name = models.CharField(max_length=64,unique=True)#课程名 #CharField作用是保存文本,定长的变量类型price = models.PositiveSmallIntegerField(verbose_name="学费")#学费#PositiveSmallIntegerField正小整数 0 ~ 32767period = models.PositiveSmallIntegerField(verbose_name="周期(月)") #PositiveSmallIntegerField正小整数 0 ~ 32767outline = models.TextField() #课程大纲 #文本类型def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return self.name #返回 #课程名class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "03课程表"#verbose_name_plural给你的模型类起一个更可读的名字'''04客户信息表''' class Customer(models.Model):name = models.CharField(max_length=32,blank=True,null=True)#客户名#CharField定长文本 #名字最长32 # Django可空 #数据库可以为空qq = models.CharField(max_length=64,unique=True) #QQ号#CharField定长文本 #名字最长64 #唯一,不能重复qq_name = models.CharField(max_length=64,blank=True,null=True)#QQ名 #CharField定长文本 #名字最长64 # Django可空 #数据库可以为空phone = models.CharField(max_length=64,blank=True,null=True)#手机号 #CharField定长文本 #名字最长64 # Django可空 #数据库可以为空 source_choices = ( #客户渠道来源 (内存生成)(0,'转介绍'),(1,'QQ群'),(2,'官网'),(3,'百度推广'),(4,'51CTO'),(5,'知乎'),(6,'市场推广'),)#PositiveSmallIntegerField正小整数 0 ~ 32767(省空间)#choices是Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作source = models.SmallIntegerField(choices=source_choices)#客户渠道来源#CharField定长文本#verbose_name是Admin中显示的字段名称#名字最长64 # Django可空 #数据库可以为空referral_from = models.CharField(verbose_name="转介绍人qq",max_length=64,blank=True,null=True) #来自谁介绍的#ForeignKey就是表与表之间的某种约定的关系#verbose_name是Admin中显示的字段名称 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。consult_courses = models.ForeignKey("Course",verbose_name="咨询课程", on_delete=models.CASCADE) #关联到 课程表 content= models.TextField(verbose_name="咨询详情") #TextField无限制长度的文本#verbose_name是Admin中显示的字段名称#ManyToManyField多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。tags = models.ManyToManyField("Tag",blank=True)#多对多关联到 标签表#ForeignKey就是表与表之间的某种约定的关系 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。consultant = models.ForeignKey("UserProfile", on_delete=models.CASCADE) #关联到 账号表 memo = models.TextField(blank=True,null=True)#备注#TextField无限制长度的文本#Django可空#数据库可以为空#DateTimeField日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] #auto_now_add创建时间(只读)date = models.DateTimeField(auto_now_add=True)#创建时间(数据库自增)def __str__(self): #__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return self.qq #返回 #QQ号class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "04客户表" #verbose_name_plural给你的模型类起一个更可读的名字"""05客户跟进表""" class CustomerFollowUp(models.Model):#ForeignKey就是表与表之间的某种约定的关系 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。customer = models.ForeignKey("Customer", on_delete=models.CASCADE)#客户名 #关联到 客户信息表 content = models.TextField(verbose_name="跟进内容")#跟进的内容#TextField无限制长度的文本#verbose_name是Admin中显示的字段名称#ForeignKey就是表与表之间的某种约定的关系 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。consultant =models.ForeignKey("UserProfile", on_delete=models.CASCADE) #关联到 账号表 intention_choices =( #报名状态(0,'2周内报名'),(1,'1个月内报名'),(2,'近期无报名计划'),(3,'已在其它机构报名'),(4,'已报名'),(5,'已拉黑'),)#PositiveSmallIntegerField正小整数 0 ~ 32767(省空间)#choices是Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作intention=models.SmallIntegerField(choices=intention_choices) #报名状态#DateTimeField日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] #auto_now_add创建时间(只读)date = models.DateTimeField(auto_now_add=True)#创建时间(数据库自增)def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return "<%s:%s>" %(self.customer.qq,self.intention) #返回#格式化字符串#跨表里的QQ号#报名状态class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "05客户跟进表"#verbose_name_plural给你的模型类起一个更可读的名字"""06学员报名信息表""" class Enrollment(models.Model):# ForeignKey就是表与表之间的某种约定的关系#verbose_name是Admin中显示的字段名称 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。customer = models.ForeignKey("Customer",on_delete=models.CASCADE)#学员名字 #关联到 客户信息表enrolled_class = models.ForeignKey("ClassList",verbose_name="所报班级",on_delete=models.CASCADE)#关联到 班级表consultant = models.ForeignKey("UserProfile",verbose_name="课程顾问",on_delete=models.CASCADE) #关联到 账号表#BooleanField布尔值类型#default=False默认(True)不允许出现空字符#verbose_name是Admin中显示的字段名称contract_agreed = models.BooleanField(default=False,verbose_name="学员已经同意合同")#学员看合同contract_approved = models.BooleanField(default=False,verbose_name="合同已经审核") #谁审核# DateTimeField日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] #auto_now_add创建时间(只读)date = models.DateTimeField(auto_now_add=True)#创建时间(数据库自增)def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return "%s %s" %(self.customer,self.enrolled_class)#返回#格式化字符串#学员名字#所报班级class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据unique_together = ("customer","enrolled_class")#联合索引verbose_name_plural = "06学员报名信息表"#verbose_name_plural给你的模型类起一个更可读的名字"""07缴费记录表""" class Payment(models.Model):#ForeignKey就是表与表之间的某种约定的关系#verbose_name是Admin中显示的字段名称 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。customer = models.ForeignKey("Customer",on_delete=models.CASCADE)#学员名字 关联到 客户信息表course = models.ForeignKey("Course",verbose_name="所报课程",on_delete=models.CASCADE)#关联到 课程表#PositiveSmallIntegerField正小整数 0 ~ 32767 #verbose_name是Admin中显示的字段名称#默认值=500amount = models.PositiveIntegerField(verbose_name="数额",default=500)#缴费数额#ForeignKey就是表与表之间的某种约定的关系#CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。consultant = models.ForeignKey("UserProfile",on_delete=models.CASCADE)#缴费给谁 关联到 账号表#DateTimeField日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] #auto_now_add创建时间(只读)date=models.DateTimeField(auto_now_add=True)#创建时间(数据库自增)def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return "%s %s" %(self.customer,self.amount)#返回#格式化字符串#学员名字#缴费数额class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "07缴费记录表"#verbose_name_plural给你的模型类起一个更可读的名字"""08每节课上课纪录表""" class CourseRecord(models.Model):# ForeignKey就是表与表之间的某种约定的关系#verbose_name是Admin中显示的字段名称 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。from_class = models.ForeignKey("ClassList",verbose_name="班级",on_delete=models.CASCADE) #那个班级#PositiveSmallIntegerField正小整数 0 ~ 32767 #verbose_name是Admin中显示的字段名称day_num = models.PositiveSmallIntegerField(verbose_name="第几节(天)") #第几节课# ForeignKey就是表与表之间的某种约定的关系 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。teacher = models.ForeignKey("UserProfile",on_delete=models.CASCADE)#老师是谁 关联到 账号表#BooleanField布尔值类型#default=True默认(True)不允许出现空字符has_homework = models.BooleanField(default=True) #有没有作业# CharField定长文本#名字最长128#Django可空#数据库可以为空homework_title = models.CharField(max_length=128,blank=True,null=True) #作业标题#TextField无限制长度的文本#Django可空#数据库可以为空homework_content = models.TextField(blank=True,null=True) #作业内容#TextField无限制长度的文本#verbose_name是Admin中显示的字段名称outline =models.TextField(verbose_name="本节课程大纲") #课程主要讲什么# DateTimeField日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] #auto_now_add创建时间(只读)date = models.DateField(auto_now_add=True)#创建时间(数据库自增)def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return " %s:%s" %(self.from_class,self.day_num)#返回#格式化字符串#班级#第几节(天)class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据unique_together = ("from_class","day_num") #联合索引verbose_name_plural = "08每节课上课纪录表" #verbose_name_plural给你的模型类起一个更可读的名字"""09学习纪录""" class StudyRecord(models.Model):# ForeignKey就是表与表之间的某种约定的关系 #CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。student = models.ForeignKey("Enrollment",on_delete=models.CASCADE)#学生名字 关联到 学员报名信息表course_record = models.ForeignKey("CourseRecord",on_delete=models.CASCADE)#开课记录 # 关联到 每节课上课纪录表 attendance_choices = (# 本节课上课状态记录(0,"已签到"),(1,"迟到"),(2,"缺勤"),(3,"早退"),)#PositiveSmallIntegerField正小整数 0 ~ 32767(省空间)#choices是Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作attendance = models.SmallIntegerField(choices=attendance_choices) # 本节课上课状态记录 score_choices = (#学习成绩(100,"A+"),(90,"A"),(85,"B+"),(80,"B"),(75,"B-"),(70,"C+"),(65,"C"),(40,"C-"),(-20,"D"),(-50,"COPY"),(0,"N/A"),)#PositiveSmallIntegerField正小整数 0 ~ 32767(省空间)#choices是Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作score = models.SmallIntegerField(choices=score_choices) #学习成绩 memo = models.TextField(blank=True,null=True)#TextField无限制长度的文本#Django可空#数据库可以为空# DateTimeField日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] #auto_now_add创建时间(只读)date = models.DateField(auto_now_add=True)#创建时间(数据库自增)def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return "%s %s %s" % (self.student, self.course_record, self.score)#返回#格式化字符串#学生名字#开课记录#学习成绩class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据unique_together = ('student','course_record')#联合索引#学生名字#开课记录verbose_name_plural = "09学习纪录"#verbose_name_plural给你的模型类起一个更可读的名字"""10账号表""" class UserProfile(models.Model):from django.contrib.auth.models import User # 使用django内置的用户表#OneToOneField一对一 #User是django Admin里的账号表#CASCADE从父表删除或更新且自动删除或更新子表中匹配的行。user = models.OneToOneField(User,on_delete=models.CASCADE)# 用户名 #创建外键,关联django用户表 name = models.CharField(max_length=32) #账号名(扩展用户字段)#CharField定长文本#ManyToManyField多对多和外键工作方式相同,只不过我们处理的是QuerySet而不是模型实例。#Django可空roles = models.ManyToManyField("Role",blank=True) #角色(权限) # 双向一对多==多对多def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return self.name #返回 #账号名class Meta: #通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "10账号表"#verbose_name_plural给你的模型类起一个更可读的名字"""11角色表""" class Role(models.Model):name = models.CharField(unique=True,max_length=32)#角色名#CharField定长文本#角色名不可以重复#最长度=32字节def __str__(self):#__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return self.name#返回 #角色名class Meta: #通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "11角色表" #verbose_name_plural给你的模型类起一个更可读的名字"""12标签表""" class Tag(models.Model):name = models.CharField(max_length=64,unique=True) #标签名#CharField定长文本#最长度=64字节#不可以重复def __str__(self): #__str__()是Python的一个“魔幻”方法,这个方法定义了当object调用str()时应该返回的值。return self.name #返回 #标签名class Meta:#通过一个内嵌类 "class Meta" 给你的 model 定义元数据verbose_name_plural = "12标签表" #verbose_name_plural给你的模型类起一个更可读的名字
models
四.CRM项目配置 生成数据库
"""
#运行 Terminal
# 生成 数据表
# python manage.py makemigrations
# 数据表 迁移
# python manage.py migrate
"""
五.CRM项目配置ADMIN
1 from django.contrib import admin 2 # Register your models here. 3 from crm import models #从crm导入models 4 5 #注册到 Django Admin里 6 admin.site.register(models.Branch) #01校区表 7 admin.site.register(models.ClassList) #02班级表 8 admin.site.register(models.Course) #03课程表,可以报名那些课程 9 admin.site.register(models.Customer) #04客户信息表 10 admin.site.register(models.CustomerFollowUp) #05客户跟进表 11 admin.site.register(models.Enrollment) #06学员报名信息表 12 admin.site.register(models.Payment) #07缴费记录表 13 admin.site.register(models.CourseRecord) #08每节课上课纪录表 14 admin.site.register(models.StudyRecord) #09学习纪录 15 admin.site.register(models.UserProfile) #10账号表 16 admin.site.register(models.Role) #11角色表 17 admin.site.register(models.Tag) #12标签表 18 19 ''' 20 Django Admin里账号密码重置方法 21 #运行 Terminal 22 23 python manage.py createsuperuser 24 25 Username : admin 26 Email address: admin@qq.com 27 Password: admin123456 28 Password (again): admin123456 29 30 31 英文转中文方法 32 到settings.py里修改 33 # LANGUAGE_CODE = 'en-us' 34 LANGUAGE_CODE = 'zh-Hans' 35 '''
admin
六.CRM项目运行ADMIN
http://127.0.0.1:8000/admin/
七.CRM项目ADMIN英文转中文
英文转中文方法
到settings.py里修改
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans'
如果感觉本章博客对您有帮助,请尽情打赏吧!
转载于:https://www.cnblogs.com/ujq3/p/8553784.html
Django项目:CRM(客户关系管理系统)--02--01PerfectCRM基本配置ADMIN02相关推荐
- Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)
源码获取:博客首页 "资源" 里下载! Springboot项目CRM客户关系管理系统: 系统实现了CRM客户关系系统的基本功能,主要有看板(当月参与的业务机会.当月转化情况.将要 ...
- 开源项目-CRM客户关系管理系统
哈喽,大家好,今天给大家带来一个开源系统-CRM客户关系管理系统 主要功能包括客户管理,客户流失,销售机会,客户关怀等模块 系统开发环境以及版本 操作系统: Windows_7 集成开发工具: Ecl ...
- Django CRM客户关系管理系统
CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...
- Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程
客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...
- JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)
JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(附部分源码) 一.项目背景 项目演示 二.项目介绍 三.涉及技术 总结 源码地址 一.项目背景 "世上本来没有CRM,大家的生 ...
- 联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码
联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码 客户拜访记录的列表的显示, 客户拜访记录的保存, 客户拜访记录查询(条件 ...
- CRM客户关系管理系统商业项目
本课程共33讲,购买课程后,可以下载项目需求分析文档,数据库设计文档,完整的项目源代码,数据库文件等资料,系统采用jsp,servlet,js,ajax,jquery,easyui,mysql数据库等 ...
- Myesclipe+SSH+jsp+mysql+tomcate实现一个简单的CRM客户关系管理系统
导读: CRM客户关系管理系统的目的通过客户管理,产品管理,系统管理等功能同客户建立联并收集客户信息,此基础上满足客户"一对一"个性化服务.同时信息在企业的流程上得以流转,让客户得 ...
- CRM客户关系管理系统源码
项目介绍: 这是一个基于Springboot+MySql实现的CRM客户关系管理系统. 技术特点: SpringBoot+MyBatis+Maven+Jquery+Bootstrap 推荐环境配置: ...
- 基于java的CRM客户关系管理系统的设计与实现
本科毕业设计(论文) 题 目: 基于java的CRM客户关系管理系统的设计与实现 专题题目: 说 明 请按以下顺序编排: 封面 任务书 开题报告 中外文摘要及关键词 目录 正文 附录(可选) 参考文献 ...
最新文章
- 05 Java程序员面试宝典视频课程之Jquery
- 【译】Diving Into The Ethereum VM Part 5 — The Smart Contract Creation Process
- 测试HAPROXY的文件分流办法
- 图像二维离散傅里叶变换、幅度谱、相位谱
- mysql数据库简单指令_Mysql数据库一些简单命令
- linux单片机烧录软件下载,在Linux下烧录51单片机
- “什么?中东的土豪给我们 App 充了大钱!”
- 短信验证码功能(阿里云版)
- Python爬取淘宝商品附加cookie修改
- C++--数字转大写金额
- CentOS安装打字游戏,typespeed
- 打开windows资源共享以及“无法访问你可能没有权限使用网络资源”问题的解决
- 建武28a对讲机最大距离_健伍TH-26A,TG-28A,TH-28A和TK208对讲机检修实例说明
- 爬取房天下新房、二手房房源数据(scrapy-redis分布式爬虫)
- 程序员怎样才能实现财富自由
- 利用Jenkins+蒲公英平台显示二维码 部署Android打包踩过的坑
- java 保存输入的数据_java从键盘输入数据并保存到数组中
- 多态的含义、多态的作用及多态的详细代码实现
- 采购货物和服务的有效步骤
- 忙里偷闲 - 应该较真吗
热门文章
- 项目管理实践之版本控制工具SVN
- 2012.4.16总结(三)
- linux 的学习笔记 tree ifconfig
- Synopsys MetaWare for Linux 安装与编译指南
- C++通过Wininet库提交POST信息登录到PHPChina中文开发者社区
- ubuntu安装cairo
- JavaScript 是如何工作的:WebRTC和对等网络的机制!
- 20172303 2017-2018-2 《程序设计与数据结构》实验五报告
- Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager)
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(2)数据获取与数据集操作