标签:als 之一 any rom end 记录 unique day 官网
from django.db import models #导入models这个类 from django.contrib.auth.models import User #导入在django后台中自己创建的用户 # Create your models here. #-----------客户信息表---------# class Customer(models.Model): #所有的model模型都要继承models.Model这个类 ‘‘‘客户信息表‘‘‘ source_choices = ( (0,‘转介绍‘), (1,‘QQ群‘), (2,‘官网‘), (3,‘百度推广‘), (4,‘51CTO‘), (5,‘知乎‘), (6,‘市场推广‘) )#第一个值是在数据库中存的值,第二个值是在后台界面上显示的值 name = models.CharField(max_length=32,blank=True,null=True) #32个字节,最多能存32个字符,blank=True表明在admin表单中可以为空,null表明数据库可以为空,两个都默认为False qq = models.CharField(max_length=32,unique=True) #unique表明这个字段数据在数据库中必须唯一 qq_name = models.CharField(max_length=64,blank=True,null=True) #客户的qq名称 phone = models.CharField(max_length=64,blank=True,null=True) #客户的电话 source = models.SmallIntegerField(choices=source_choices) #客户的来源,小整数。SmallIntegerField包含-32768到32767。 referral_from = models.CharField(verbose_name="转介绍人qq",max_length=64,blank=True) #转介绍人信息,verbose_name="转介绍人qq"将信息可读化 consult_course = models.ForeignKey("Course",verbose_name="咨询课程") #咨询的课程,多对一(ForeignKey)外键要定义在‘多’的一方,注意在django2中一定要设置on_delete这个属性值 content = models.TextField(verbose_name="咨询详情") #咨询的内容,verbose_name="咨询详情"将信息可读化 tags = models.ManyToManyField("Tag") #给这个人打标签,多对多关系在数据库中也是非常常见的关系类型。 # 比如一本书可以有好几个作者,一个作者也可以写好几本书。 # 多对多的字段可以定义在任何的一方,请尽量定义在符合人们思维习惯的一方,但不要同时都定义 #null参数对ManyToManyField多对多字段无效!设置null=True毫无意义 consultant = models.ForeignKey("UserProfile",verbose_name="咨询的人员") #咨询了那一个销售人员,外键关联用户,注意在django2中ForeignKey一定要设置on_delete这个属性值 note = models.TextField(blank=True,null=True) #给这个人做一些笔记, date = models.DateTimeField(auto_now_add=True) #客户信息时间表 # auto_now:每当对象被保存时将字段设为当前日期,常用于保存最后修改时间。 # auto_now_add:每当对象被创建时,设为当前日期,常用于保存创建日期(注意,它是不可修改的)。 status_choices = ( (0,"未报名"), (1,"已报名"), ) status = models.SmallIntegerField(choices=status_choices,default=0) #小整数,包含 - 32768到32767。 def __str__(self): return self.name # 魔法方法,给对象返回名称 class Meta: # verbose_name = "客户信息表" verbose_name_plural = "07客户信息表" # verbose_name:用于设置模型对象的直观、人类可读名如果不指定,会使用小写模型名作为默认值 # verbose_name_plural如果不指定该选项,那么默认的复数名字是verbose_name加上‘s’ #-----------客户标签表---------# class Tag(models.Model): name = models.CharField(unique=True,max_length=32) #字符型,必须要填max_length,unique=True表明标签名字必须唯一 def __str__(self): return self.name # 魔法方法,给对象返回名称 class Meta: verbose_name_plural = "09标签" #-----------客户标跟进表---------# class CustomerFollowUp(models.Model): ‘‘‘客户跟进表‘‘‘ intention_choices = ( (0,‘2周内报名‘), (1,‘1个月内报名‘), (2,‘近期无报名计划‘), (3,‘已在其它机构报名‘), (4,‘已报名‘), (5,‘已拉黑‘), ) customer = models.ForeignKey("Customer")#跟进哪一个客户,外键关联 content = models.TextField(verbose_name="跟进内容")#跟进了那些内容 consultant = models.ForeignKey("UserProfile")#那个人跟进的,关联到用户 date = models.DateTimeField(auto_now_add=True)#跟进的时间,创建后不修改。DateTimeField精确到年月 intention = models.SmallIntegerField(choices=intention_choices)#报名状态 def __str__(self): return "<%s : %s>" % (self.customer.qq,self.intention) class Meta: verbose_name_plural = "05课户跟进记录" #-----------课程表---------# class Course(models.Model): ‘‘‘课程表‘‘‘ name = models.CharField(max_length=64,unique=True)#名字必须唯一 price = models.PositiveSmallIntegerField() #PositiveSmallIntegerField较小的正整数字段,从0到32767。 period = models.PositiveSmallIntegerField(verbose_name="周期(月)") #PositiveSmallIntegerField 较小的正整数字段,从0到32767。 outline = models.TextField() #课程大纲 def __str__(self): return self.name class Meta: verbose_name_plural = "04课程表" #模型的元数据,指的是“除了字段外的所有内容”,例如排序方式、数据库表名、人类可读的单数或者复数名等等。 #想在模型中增加元数据,方法很简单,在模型类中添加一个子类,名字是固定的Meta #-----------校区表---------# class Branch(models.Model): ‘‘‘校区‘‘‘ name = models.CharField(max_length=128,unique=True) addr = models.CharField(max_length=128) def __str__(self): return self.name class Meta: verbose_name_plural = "01校区" #-----------班级表---------# class ClassList(models.Model): ‘‘‘班级表‘‘‘ class_type_choices = ( (0,‘面授(脱产)‘), (1,‘面授(周末)‘), (2,‘网络班‘) ) branch = models.ForeignKey("Branch",verbose_name="校区") course = models.ForeignKey("Course")#课程表关联到课程 semester = models.PositiveSmallIntegerField(verbose_name="学期")#第几个学期 teacher = models.ManyToManyField("UserProfile",blank=True)#讲师关联起来 class_type = models.SmallIntegerField(choices=class_type_choices,verbose_name="上课类型") strat_date = models.DateField(verbose_name="开班日期")#不包含时分秒 end_date = models.DateField(verbose_name="结业日期",blank=True,null=True) def __str__(self): return "%s %s %s" % (self.branch,self.course,self.semester) #返回到界面上显示的值 class Meta: unique_together = (‘branch‘,‘course‘,‘semester‘) #联合唯一 #unique_together,同一个校区的课程和学期是不能相同的。 #每一个元素都是一个元组,表示一组联合唯一约束,可以同时设置多组约束。 # 为了方便,对于只有一组约束的情况下,可以简单地使用一维元素,例如:unique_together = (‘name‘, ‘birth_day‘, ‘address‘) #两个人的名字、生日和出生地不能为同一天。 verbose_name_plural = "02班级表" #-----------上课记录表---------# class CourseRecord(models.Model): ‘‘‘上课记录‘‘‘ from_class = models.ForeignKey("ClassList",verbose_name="班级")#来自于哪个班级,具体哪个班级 day_num = models.PositiveSmallIntegerField(verbose_name="第几节(天)") #较小的正整数字段,从0到32767。 teacher = models.ForeignKey("UserProfile") #关联用户,用户中有很多人,学生、老师、销售等 has_homework = models.BooleanField(default=True) #布尔值类型。默认值是None。在HTML表单中体现为CheckboxInput标签 homework_title = models.CharField(max_length=128,blank=True,null=True) homework_content = models.TextField(blank=True,null=True) #大量文本内容,在HTML中表现为Textarea标签,最常用的字段类型之一! # 如果你为它设置一个max_length参数,那么在前端页面中会受到输入字符数量限制,然而在模型和数据库层面却不受影响。 outline = models.TextField(verbose_name="课程大纲") date = models.DateField(auto_now_add=True) #上课的日期,不显示时分秒 def __str__(self): return "%s %s" % (self.from_class,self.day_num) class Meta: unique_together = ("from_class","day_num")#联合唯一,只能有同一个课程和天数要唯一 verbose_name_plural = "03上课记录" #--------记录学生学习记录表------# class StudyRecord(models.Model): ‘‘‘学习记录表‘‘‘ attendance_choices = ( (0,‘已签到‘), (1,‘迟到‘), (2,‘缺勤‘), (3,‘早退‘), ) score_choices = ( (100,"A+"), (90,"A"), (85,"B+"), (80,"B"), (75,"B-"), (70,"C+"), (60,"C"), (40,"C-"), (-50,"D"), (-100,"Copy"), (0,"N/A"), ) student = models.ForeignKey("Enrollment")#关联到报名的人 course_record = models.ForeignKey("CourseRecord")#关联到上课的人 attendance = models.SmallIntegerField(choices=attendance_choices, default=0)#小整数,包含-32768到32767。 scorce = models.SmallIntegerField(choices=score_choices,default=0)# 小整数,包含-32768到32767。 memo = models.TextField(blank=True,null=True)#备注,上课情况如何等 date = models.DateField(auto_now_add=True)#不包含时分秒 def __str__(self): return "%s %s %s" % (self.student,self.course_record,self.scorce) class Meta: verbose_name_plural = "06学习记录" #-----------报名表---------# class Enrollment(models.Model): ‘‘‘报名表‘‘‘ customer = models.ForeignKey("Customer")#跟踪的客户,有客户并不代表这个客户报名了 enrolled_class = models.ForeignKey("ClassList",verbose_name="所报班级")#关联班级表 consultant = models.ForeignKey("UserProfile",verbose_name="课程顾问") contract_agreed = models.BooleanField(default=False,verbose_name="学员已同意条款") #布尔值类型。默认值是None。在HTML表单中体现为CheckboxInput标签。如果要接收null值,请使用NullBooleanField。 contract_approved = models.BooleanField(default=False,verbose_name="合同已已审核")#看合同是否已经审核 date = models.DateField(auto_now_add=True) def __str__(self): return "%s %s"%(self.customer,self.enrolled_class) class Meta: unique_together = ("customer","enrolled_class")#客户与报名的班级必须唯一 verbose_name_plural = "08报名表" #-----------缴费记录表---------# class Payment(models.Model): ‘‘‘缴费记录‘‘‘ customer = models.ForeignKey("Customer") course = models.ForeignKey("Course",verbose_name="所报课程")#所报课程要关联起来 amount = models.PositiveIntegerField(verbose_name="数额",default=500)#正整数字段,包含0,最大2147483647。 consulant = models.ForeignKey("UserProfile")#必须关联到用户,咨询的人必须关联用户表 date = models.DateTimeField(auto_now_add=True)#显示时分秒 def __str__(self): return "%s %s"%(self.customer,self.amount)#客户的名字和数额, class Meta: verbose_name_plural = "10缴费记录" #------------账号表--------# class UserProfile(models.Model): ‘‘‘账号表‘‘‘ user = models.OneToOneField(User)#用户有哪些人 #将用户外键关联到User #这种关系类型多数用于当一个模型需要从别的模型扩展而来的情况。 # 比如,Django自带auth模块的User用户表,如果你想在自己的项目里创建用户模型,又想方便的使 #用Django的认证功能,那么一个比较好的方案就是在你的用户模型里, # 使用一对一关系,添加一个与auth模块User模型的关联字段。 name = models.CharField(max_length=32)#它的名字叫做什么 roles = models.ManyToManyField("Role",blank=True)#它的角色是什么,什么样的角色能够看什么菜单 def __str__(self): return self.name class Meta: verbose_name_plural = "12账号表" #------------角色表--------# class Role(models.Model): ‘‘‘角色表‘‘‘ #不同角色看到的菜单是不同的 name = models.CharField(max_length=32,unique=True) menus = models.ManyToManyField("Menu",blank=True) def __str__(self): return self.name class Meta: verbose_name_plural = "11角色" #------------菜单表--------# class Menu(models.Model): ‘‘‘专门存菜单‘‘‘ name = models.CharField(max_length=32)#名字最多为32个字符 url_name = models.CharField(max_length=64) #不同权限的人看到的菜单是不同的,通过url去控制 def __str__(self): return self.name class Meta: verbose_name_plural = "13菜单"
标签:als 之一 any rom end 记录 unique day 官网
原文地址:https://www.cnblogs.com/chengtianyu/p/9397090.html