[TOC=1,5]
>[success] # 創建表思路
>先列出需求表,在填寫表的字段例如:
~~~
class UserProfile(models.Model):
"""用戶信息表"""
pass
class Role(models.Model):
"""角色表"""
pass
class CustomerInfo(models.Model):
"""客戶信息表"""
pass
class CustomerFollowUp(models.Model):
"""客戶跟蹤表"""
pass
class Course(models.Model):
"""課程表"""
pass
class ClassList(models.Model):
"""班級列表"""
pass
class CourseRecord(models.Model):
"""上課記錄"""
pass
class Students(models.Model):
"""學生表"""
pass
class StudyRecord(models.Model):
"""上課記錄"""
pass
class Branch(models.Model):
"""校區"""
pass
~~~
>[danger] ##### 后續表
>權限
>問卷調查
>知識管理
>合同
* * * * *
<br>
>[success] # 表字段設計
<br>
* * * * *
>[danger] ##### 用戶登錄-UserProfile
>**字段介紹**
>user ----》 和django自帶的User 字段進行一對一關聯
>name ----》 用戶姓名
>role -----》 權限,用戶和權限進行多對多,一個用戶有多個權限,多個權限可以對一個用戶
~~~
class UserProfile(models.Model):
"""用戶信息表"""
user = models.OneToOneField(User)
name = models.CharField(max_length=64,verbose_name="姓名")
role = models.ManyToManyField('Role',blank=True,null=True)
def __str__(self):
return self.name
~~~
<br>
* * * * *
>[danger] ##### 權限角色表-Role
>**字段介紹**
>name ----》 權限名稱
~~~
class Role(models.Model):
"""角色表"""
name =models.CharField(max_length=64,unique=True)
menus = models.ManyToManyField('Menus',blank=True)
def __str__(self):
return self.name
~~~
<br>
* * * * *
>[danger] ##### 客戶信息表-CustomerInfo
>**字段介紹**
>name -----》 客戶名字
contact_type_choice ----》 ((0,'qq'),(1,'微信'),(2,'手機號')) 聯系方式
concat_type -----》聯系方式默認0,和上面打的字段是choice關系
consult_courses ----》咨詢內容和課程表多對多,可以咨詢多個課程,多個課程可以被咨詢
consult_content ----》咨詢內容
source_choices -----》 ((0,"qq群"), (1,'51TOC'), (2,"介紹人") )獲取途徑
source -----》獲取途徑默認0,和上面打的字段是choice關系
referral_from ---》"轉介紹" 自關聯一對多,介紹人
status_choices -----》 ((0,'未報名'),(1,"已報名"),(2,'已退學'))
status -----》學員狀態默認0,和上面打的字段是choice關系
date ----》創建時間
consultant----》課程顧問和用戶一對多,多個用戶都可以是課程顧問
~~~
class CustomerInfo(models.Model):
"""客戶信息表"""
name = models.CharField(max_length=64,default=None)
contact_type_choice = ((0,'qq'),(1,'微信'),(2,'手機號'))
concat_type = models.SmallIntegerField(choices=contact_type_choice,default=0)
consult_courses = models.ManyToManyField('Course',verbose_name='咨詢課程')
consult_content = models.TextField(verbose_name='咨詢內容')
source_choices = ((0,"qq群"),
(1,'51TOC'),
(2,"介紹人")
)
source = models.SmallIntegerField(choices=source_choices)
referral_from = models.ForeignKey('self',blank=True,null=True,verbose_name="轉介紹")
status_choices = ((0,'未報名'),(1,"已報名"),(2,'已退學'))
status = models.SmallIntegerField(choices=status_choices)
date = models.DateField(auto_now_add=True)
consultant = models.ForeignKey("UserProfile",verbose_name='課程顧問')
~~~
<br>
* * * * *
>[danger] ##### 客戶跟蹤表-CustomerFollowUp
>**字段介紹**
>customer ----》 和customerInfo用戶信息表一對多
>content ----》 跟蹤內容記錄
>user ----》跟進人和userprofile 用戶表一對多
>status_choices -----》報名狀態((0,"近期無報名"), (1, "一個月報名"), (2, "2周內報名"),(3, "已報名"),)
>status -----》和上面字段關聯
>date ------》創建時間
~~~
class CustomerFollowUp(models.Model):
"""客戶跟蹤表"""
customer = models.ForeignKey('CustomerInfo',verbose_name="用戶名字")
content = models.TextField(verbose_name="跟蹤內容")
user = models.ForeignKey('UserProfile',verbose_name="跟進人")
status_choices = ((0,"近期無報名"),
(1, "一個月報名"),
(2, "2周內報名"),
(3, "已報名"),
)
status = models.SmallIntegerField(choices=status_choices,verbose_name='學生報名')
date = models.DateField(auto_now_add=True,verbose_name="創建時間")
def __str__(self):
return self.customer
~~~
<br>
* * * * *
>[danger] ##### 課程表-Course
>**字段介紹**
>name -----》'課程名字' unique=True唯一
price ----》"價格"
period-----》課程周期(月)'
outline -----》"大綱"
~~~
class Course(models.Model):
"""課程表"""
name = models.CharField(verbose_name='課程名字',max_length=64,unique=True)
price = models.PositiveIntegerField(verbose_name="價格")
period = models.SmallIntegerField(verbose_name='課程周期(月)',default=5)
outline = models.TextField(verbose_name="大綱")
def __str__(self):
return self.name
~~~
<br>
* * * * *
>[danger] ##### 班級列表-ClassList
>**字段介紹**
>course ----》'Course'一對多
semester----》"學期"
teachers -----》老師 'UserProfile',多對多,一個班級多個老師
start_date --------》('開班日期')
graduate_date -------》'畢業日期'
branch --------》和校區一對多 Branch 表
~~~
class ClassList(models.Model):
"""班級列表"""
branch = models.ForeignKey('Branch',verbose_name="校區")
course = models.ForeignKey('Course')
semester = models.SmallIntegerField(verbose_name="學期")
teachers = models.ManyToManyField('UserProfile',verbose_name="老師")
start_date = models.DateField('開班日期')
graduate_date = models.DateField('畢業日期',blank=True,null=True)
def __str__(self):
return "%s(%s)期"%(self.course.name,self.semester)
class Meta:
unique_together = ('branch','course','semester')
verbose_name_plural =verbose_name = "班級"
~~~
<br>
* * * * *
>[danger] ##### 上課記錄-CourseRecord
>**字段介紹**
> class_grade---->上課班級 和ClassList表一對多
day_num ----》"課程節次"
teacher ----》老師表和UserProfile一對多
title -------》本節主題"
content -----》'本節內容'
has_homework ------》'本節有作業'
homework --------》"作業需求",
date = models.DateTimeField(auto_now_add=True)
~~~
class CourseRecord(models.Model):
"""上課記錄"""
class_grade = models.ForeignKey('ClassList',verbose_name="上課班級")
day_num = models.SmallIntegerField(verbose_name="課程節次")
teacher = models.ForeignKey('UserProfile')
title = models.CharField("本節主題",max_length=64)
content = models.TextField('本節內容')
has_homework = models.BooleanField('本節有作業',default=True)
homework = models.TextField("作業需求",blank=True,null=True)
date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "%第(%s)節"%(self.class_grade,self.day_num)
class Meta:
unique_together = ("class_grade","day_num")
verbose_name = '上課記錄'
verbose_name_plural = verbose_name
~~~
<br>
* * * * *
>[danger] ##### 學習記錄-StudyRecord
>**字段介紹**
>curse_record ----》 和上課記錄一對多('CourseRecord')
student = ---->學生和('Student')一對多
score_choices ----》 ((100,"A"),(59,"不及格"))
score----》學生成績和上面字段關聯
show_choices ----》 ((0,"缺勤"),(1,"簽到"),(2,"遲到/早退"))
show_status ---》學生上課記錄和上面字段關聯
note----》"備注"
~~~
class StudyRecord(models.Model):
"""學習記錄"""
course_record = models.ForeignKey('CourseRecord')
student = models.ForeignKey('Student')
score_choices = ((100,"A"),(59,"不及格"))
score = models.SmallIntegerField(choices=score_choices)
show_choices = ((0,"缺勤"),(1,"簽到"),(2,"遲到/早退"))
show_status = models.SmallIntegerField(choices=show_choices,default=1)
note = models.TextField("備注",null=True,blank=True)
def __str__(self):
return "%s %s %s"%(self.course_record,self.student,self.score)
class Meta:
verbose_name_plural =verbose_name = "學習記錄"
~~~
<br>
* * * * *
>[danger] ##### 學員表-Student
>**字段介紹**
>customer ----》用戶信息'CustomerInfo'
class_grades ----》'班級'和 classlist 多對多
~~~
class Student(models.Model):
"""學員表"""
customer = models.ForeignKey('CustomerInfo')
class_grades = models.ManyToManyField('ClassList',verbose_name='班級')
class Meta:
verbose_name_plural =verbose_name = "學員"
~~~
<br>
* * * * *
>[danger] ##### 校區-Branch
>**字段介紹**
>name ----》名字
addr ---》地址
~~~
class Branch(models.Model):
"""校區"""
name = models.CharField(max_length=64,unique=True)
addr = models.CharField(max_length=256,verbose_name="地址",null=True,blank=True)
class Meta:
verbose_name_plural="校區"
~~~
* * * * *
<br>
>**字段介紹**
>name ----》
addr ---》地址
~~~
class Menus(models.Model):
"""動態菜單"""
name = models.CharField(max_length=64)
url_name = models.CharField(max_length=64)
url_type_chooice = ((0,'absoulte'),(1,'dynamic'))
url_type = models.SmallIntegerField(choices=url_type_chooice,default=0)
def __str__(self):
return self.name
class Meta:
unique_together = ('name','url_name')
~~~
>[success] # 菜單表分析
>可以自定義網址,也可以用django urlname的屬性來做相對的地址
**自定義地址**:

**固定地址**


- 網絡原理
- 為搭建框架做準備
- 簡單認識網路
- 自定義模擬網站案例
- 優化最終框架
- 數據存儲 -- data
- 用戶個人信息存儲 -- User.txt
- 路由映射 -- routes
- 處理用戶信息 -- routes_static.py
- 保存靜態文件 -- static
- templates -- html 集中處理模塊
- 首頁 -- index.html
- 登陸 -- login.html
- 用戶注冊頁面 -- register
- 日志模塊 -- log.gua.txt
- 啟動文件--server.py
- orm處理 -- model.py
- 日志模塊 -- utils.py
- 兩種數據庫類型
- 傳統數據庫了解篇
- 前端快速入門
- JS簡單使用入門
- css簡單快速入門
- DJANGO
- virtualenv-創建虛擬環境
- 項目結構
- django-admin中文配置
- django-打印sql語句
- django-基礎
- 認識MVC和MTV
- Django--初識
- Django--初識案例
- Django-FBV/CBV
- Django--常用input 交互
- Django-url
- Django-url.py 配置
- Django-include 使用
- Django-url name
- Django-ORM
- ORM-數據庫配置
- ORM-model字段
- ORM-model字段解釋
- ORM-字段選項
- ORM-查詢
- ORM-四種常用查詢方法
- ORM-三種獲取數據
- ORM-其他查詢方式
- ORM-條件查詢雙線
- ORM-Q和F條件使用
- ORM-三種數據庫交互
- 案例 -- 一對多
- ORM-技巧/常見問題
- ORM-N+1 問題
- ORM-并發的處理
- ORM-數量查詢、
- ORM-正向反向查詢
- ORM-基礎案例一
- ORM-基礎一對多案例
- Django-templates
- Django-模板的繼承
- Django-模板的過濾
- Django-自定義模板的過濾
- Django-cookie
- Django-cookies 裝飾器
- Djang-session
- Django-CSRF
- Django-中間件 -- 后續了解
- Django- 緩存 -- 沒有深入了解
- Django-form
- From-ajax
- form-內部驗證處理
- form-屬性
- form-常用的標簽字段
- form-常用的下拉和選擇
- form-widget速查
- Django-ajax序列化
- Django-多種ajax寫法
- ajax-原生寫法
- ajax-$寫法
- ajax-ifram
- Django-ajax圖片上傳
- ajax-原始寫法
- ajax-正常寫法
- iframe+form
- 實戰寫法
- Django-常用自編寫組件
- Django-雙菜單組合搜索
- Django - 多菜單組合搜索
- Django-分頁
- django-綜合基礎
- 綜合基礎-render
- django-admin
- admin-頁面配置
- admin-字段配置
- admin-編輯頁面
- admin-forms驗證
- admin-創建抽象類
- django-驗證碼
- 驗證碼-第三方生成庫
- 驗證碼-view.py使用
- 驗證碼-注意引入Monaco.ttf
- django-用戶注冊
- 注冊-form 模塊
- 注冊-views 模塊
- 注冊-html模塊
- 注冊-model模塊
- django-用戶登錄三種
- session登錄
- form-session 寫法
- view-寫法
- Html-寫法
- model-寫法
- 繼承類登錄
- 外鍵關聯登錄
- django-簡單的student 管理案例
- app-urls.py
- app-models.py配置
- admin-admin.py配置
- app-form.py 和數據庫關聯的寫法
- app-FBV_views.py
- app-CBV_views.py
- templates-index.html
- django-博客系統
- APP目錄-models.py 創建
- APP目錄-基礎展示數據分析
- APP目錄-基礎數據展示cls
- ListView
- DetailView
- FormView
- 額外功能拓建
- 添加文章搜索/用戶文章查詢功能
- 增加一個友情鏈接
- 增加一個評論模塊
- App-利用Bootstrap4 搭建樣式
- 項目crm
- 思維導圖
- perfectCRM-項目名字
- settings.py-配置
- view.py-登陸/登出函數
- crm-app文件
- model.py-表的創建
- admin.py-注冊后臺
- view.py-視圖層
- static-靜態文件
- css
- bootstrap.min.css
- dashboard.css
- ie10-viewport-bug-workaround.css
- signin.css
- fonts
- imgs
- js
- jquery.js
- bootstrap.min.js
- holeder.js
- ie10-viewport-bug-workaround.js
- ie-emulation-modes-warning.js
- plugins
- html模板文件-templates
- crm
- index.html-首頁模板