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)