|
|
from django.db import models
|
|
|
|
|
|
genders = [
|
|
|
('m', '男'),
|
|
|
('f', '女')
|
|
|
]
|
|
|
|
|
|
|
|
|
# forms.Form: 继承该表单类去创建自己需要的表单
|
|
|
# 添加学生模型
|
|
|
class Student(models.Model):
|
|
|
name = models.CharField(max_length=50, verbose_name="姓名")
|
|
|
gender = models.CharField(max_length=10, choices=genders, default='m', verbose_name="性别")
|
|
|
birthday = models.DateField(verbose_name='生日')
|
|
|
email = models.EmailField(verbose_name="邮箱")
|
|
|
info = models.CharField(max_length=255, verbose_name='个人简介', help_text='一句话概括自己,不超过250字')
|
|
|
grade = models.CharField(max_length=4, verbose_name='年级')
|
|
|
number = models.CharField(max_length=20, verbose_name='级内学号')
|
|
|
password = models.CharField(max_length=30, verbose_name='密码')
|
|
|
|
|
|
class Meta:
|
|
|
constraints = [
|
|
|
# 学生年级号为4位数字组成的字符串,年级下子学号为6位数字组成的字符串。
|
|
|
models.UniqueConstraint(fields=['grade', 'number'], name='student_id')
|
|
|
]
|
|
|
|
|
|
def get_id(self):
|
|
|
# 这两个连接起来组成学生的唯一学号,该学号也为其登录使用的账号。
|
|
|
# 复合主键:保证 grade和number组合的student_id唯一
|
|
|
return "%s%s" % (self.grade, self.number)
|
|
|
|
|
|
def __str__(self):
|
|
|
return "%s (%s)" % (self.get_id(), self.name)
|
|
|
|
|
|
|
|
|
# 添加老师模型
|
|
|
class Teacher(models.Model):
|
|
|
# verbose_name: 可读名,前端展示form表单时,为该属性用的表头文本。如果不设置,则将使用本字段属性名(即变量名)自动创建它(将下划线转换为空格)
|
|
|
# CharField最常用的,字符串类型字段,额外的必需参数:max_length: 字段的最大长度(字符)。
|
|
|
name = models.CharField(max_length=50, verbose_name="姓名")
|
|
|
# choices: 给Field指定可以选择的值(比如性别字段一般只能选择男或者女),默认为None
|
|
|
# default: 默认值,默认为False
|
|
|
gender = models.CharField(max_length=10, choices=genders, default='m', verbose_name="性别")
|
|
|
birthday = models.DateField(verbose_name='生日')
|
|
|
email = models.EmailField(verbose_name='邮箱')
|
|
|
# help_text: 与表单部件一起显示的辅助信息文本,常常用于提示字段输入格式(可以写HTML)
|
|
|
info = models.CharField(max_length=255, verbose_name='教师简介', help_text='不要超过250字')
|
|
|
|
|
|
department_no = models.CharField(max_length=3, verbose_name='院系号')
|
|
|
number = models.CharField(max_length=7, verbose_name='院内编号')
|
|
|
password = models.CharField(max_length=30, verbose_name='密码')
|
|
|
|
|
|
class Meta:
|
|
|
constraints = [
|
|
|
# unique: 是否唯一,默认为False。
|
|
|
# UniqueConstraint是一个唯一约束,其中fields和name都是必须要设置的参数
|
|
|
# fields :字段名列表,指定哪几个字段名要满足唯一约束。
|
|
|
models.UniqueConstraint(fields=['department_no', 'number'], name='teacher_id')
|
|
|
]
|
|
|
|
|
|
# python manage.py makemigrations 生成空的database:db.sqlite3 让 Django 知道我们在我们的模型有一些变更
|
|
|
# python manage.py migrate 更新到数据库文件/创建表结构
|
|
|
def get_id(self):
|
|
|
# 老师院系号为3位数字组成的字符串,院内编号为7位数字组成的字符串。
|
|
|
# 这两个连接起来组成老师的唯一教师号,该教师号也为其登录使用的账号。
|
|
|
return "%s%s" % (self.department_no, self.number)
|
|
|
|
|
|
def __str__(self):
|
|
|
return "%s (%s)" % (self.get_id(), self.name)
|