Django 小实例S1 简易学生选课管理系统 —— 三、创建用户模型(model)

作者自我介绍:b站小UP主时常直播编程+红警三python1对1辅导老师

python Django实现的一个简易的教务选课系统。
介绍与演示的视频版本已发到我的b站: https://www.bilibili.com/video/BV1er4y1w7ty
项目已上传到我的github: https://github.com/BigShuang/SimpleStudentCourseManagementSystem

S1总目录:

〇、初步介绍与演示
一、项目流程梳理与数据库设计
二、新建项目(project)、设置、运行
三、创建用户模型(model)
四、实现登录页面
五、实现注册功能

======================= 大爽歌作,made by big shuang =======================

三、创建用户模型(model)

本文涉及到的新的额外知识点:models
没有这部分基础的读者,建议一边阅读本文一边查阅相关知识
这里推荐我的专栏:Django自学笔记 第四章内容

数据库表的设计已在本专栏之前的博客做好了:一、项目流程梳理与数据库设计

这里对于用户模块,需要学生表和教师表,
那么对应的,这里需要建立两种模型:学生(Student),教师(Teacher)
模型的添加和修改要在对应appmodels.py中进行

首先,打开项目下的./user/models.py文件
其初始内容如下:

from django.db import models

# Create your models here.

其中第一行导入了models类,如果你的models.py文件没有导入,请添加这一行

同时开始添加自己的模型代码后,最好把第三行的注释删掉

1 添加学生模型

models.py中添加如下代码即可

class Student(models.Model):
    gender = [
        ("m", "男"),
        ("f", "女")
    ]

    name = models.CharField(max_length=50, verbose_name="姓名")
    gender = models.CharField(max_length=10, choices=gender, 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=6, verbose_name="年级子学号")
    password = models.CharField(max_length=30, verbose_name="密码")

    class Meta:
        constraints = [
            # 复合主键:保证 grade和number组合的student_id唯一
            models.UniqueConstraint(fields=['grade', 'number'], name='student_id'),
        ]

    def get_id(self):
        return self.grade + self.number

    def __str__(self):
        return "%s (%s)" % (self.grade + self.number, self.name)

说明:学生年级号为4位数字组成的字符串,年级下子学号为6位数字组成的字符串。
这两个连接起来组成学生的唯一学号,该学号也为其登录使用的账号。

比如学生李大爽,年级号为"2020",子学号为"000001",其学号为"2020000001"

2 添加老师模型

models.py中继续添加如下代码即可

class Teacher(models.Model):
    genders = [
        ("m", "男"),
        ("f", "女")
    ]

    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字")

    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 = [
            # 复合主键:保证 grade和number组合的student_id唯一
            models.UniqueConstraint(fields=['department_no', 'number'], name='teacher_id'),
        ]

    def get_id(self):
        return self.department_no + self.number

    def __str__(self):
        return "%s (%s)" % (self.department_no + self.number, self.name)

说明:老师院系号为3位数字组成的字符串,院内编号为7位数字组成的字符串。
这两个连接起来组成老师的唯一教师号,该教师号也为其登录使用的账号。

比如老师牛有力,院系号为"266",院内编号为"0000001",其教师号为"2660000001"

3 建立(更新)数据库

在django框架下,并不是添加好模型(model)就万事大吉了
添加好模型后,我们还需要手动执行脚本,才能根据模型生成对应的数据库表。
在项目文件夹下,打开命令行,按行依次执行:

python manage.py makemigrations
python manage.py migrate

解释下上面这两句的作用
其中第1句会生成对应的迁移(migrations)命令。
具体到本项目,由于是第一次运行,
那么会在./user/migrations文件夹下,
生成0001_initial.py用于记录迁移(migrations)命令
第一次运行也会在项目文件夹下,生成一个空的 database:db.sqlite3
第2句会执行第一句中生成的迁移(migrations)命令。
执行完第二句,改动才真正更新到数据库文件了。
对应到本项目,就是数据库中添加了两个模型(学生、老师)对应的数据库表。

当然,实际上,数据库中的改动并不是简单的添加了这两个模型的事,有兴趣的朋友可以打开此时的db.sqlite3看看。无法直接打开,需要使用对应的软件,我一般用DB Browser (SQLite),里面生成了很多个表,不过这个细说起来就复杂了。

以后我们如果修改了模型的属性之类,也要执行上面两句脚本去更新对应的数据库表。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值