zoukankan      html  css  js  c++  java
  • Django 小实例S1 简易学生选课管理系统 3 创建用户模型(model)

    Django 小实例S1 简易学生选课管理系统 第3节——创建用户模型(model)
    点击查看教程总目录
    作者自我介绍:b站小UP主时常直播编程+红警三python1对1辅导老师

    本文涉及到的新的额外知识点: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):
        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字")
    
        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 "%s%s" % (self.grade, self.number)
    
        def __str__(self):
            return "%s (%s)" % (self.get_id(), 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 "%s%s" % (self.department_no, self.number)
    
        def __str__(self):
            return "%s (%s)" % (self.get_id(), 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),里面生成了很多个表,不过这个细说起来就复杂了。

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

  • 相关阅读:
    c#常用简化语句
    SQL语句使用中的笔录
    UpdateProgress 实现加载效果
    maven的下载安装,配置本地仓库
    IntelliJ IDEA启动Tomcat后,无法访问Tomcat主页
    SSM框架实现分页
    mybatis-generator-xxxx 使用方法
    Mybatis错误:Parameter 'XXX' not found. Available parameters are [1, 0, param1, param2]
    mybatis高级映射(一对一,一对多)
    SSM整合---实现全部用户查询
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14308445.html
Copyright © 2011-2022 走看看