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),里面生成了很多個表,不過這個細說起來就復雜了。

以后我們如果修改了模型的屬性之類,也要執行上面兩句腳本去更新對應的數據庫表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM