跳到主要内容

复用学生管理的设计思路实现老师管理

实现老师管理模块(复用学生管理的设计思路)​

在前面的课程中,我们已经完整实现了学生管理模块,包括:

  • 列表展示
  • 新增 / 编辑 / 删除
  • 搜索
  • 批量操作
  • Excel 导入与导出

可以说,一个后台管理中最常见的功能,我们都已经覆盖到了。

接下来,我们来实现老师管理模块。

1.老师管理的整体思路​

在正式开始之前,先明确一点:

老师管理的功能结构,与学生管理几乎完全一致。

同样包含:

  • 列表页
  • 新增
  • 编辑
  • 删除
  • 搜索

因此,这一节的重点并不是「再写一遍 CRUD」, 而是学习如何:

复用已有的设计思路,快速实现一个新的管理模块。

2.创建老师管理的路由结构​

当我们点击导航中的「老师管理」时,页面会跳转到:/teachers/

1️⃣ 配置全局 URL​

在项目的全局 config/urls.py 中,新增老师模块的入口路由,代码如下:

# 代码位置:config/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('grades/',include('grades.urls')), # 班级管理
path('students/', include('students.urls')), # 学生管理
path('teachers/', include('teachers.urls')), # 教师管理
]

2️⃣ 创建 teachers 应用的 urls.py​

在 teachers 应用下新建:urls.py

并在其中定义:

  • 列表页
  • 新增
  • 编辑
  • 删除 这些路由与学生模块的结构保持一致,代码如下:
# 代码位置:teachers/urls.py
from django.urls import path
from .views import TeacherListView, TeacherCreateView, TeacherUpdateView, TeacherDeleteView

urlpatterns = [
path('', TeacherListView.as_view(), name='teachers_list'),
path('teacher/create/', TeacherCreateView.as_view(), name='teacher_create'),
path('teacher/<int:pk>/update/', TeacherUpdateView.as_view(), name='teacher_update'),
path('teacher/<int:pk>/delete/', TeacherDeleteView.as_view(), name='teacher_delete'),
]

3.设计 Teacher 模型​

接下来是数据模型。

在 models.py 中创建 Teacher 模型。

核心字段设计​

老师本质上也是一个系统用户,因此:

  • Teacher 与 User 表:一对一关系

此外,老师本身还包含以下信息:

  • 老师姓名
  • 手机号
  • 性别
  • 出生日期
  • 班级

老师与班级的关系​

这里有一个业务约束:

一个班级只有一个班主任

因此:

  • Teacher 与 Grade:一对一关系

Teacher模型代码如下:

from django.db import models
from django.contrib.auth.models import User
from grades.models import Grade


# Create your models here.
GENDER_CHOICES = [
('M', '男'),
('F', '女'),
]

class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='teacher')
teacher_name = models.CharField(max_length=50, verbose_name='老师姓名')
phone_number = models.CharField(max_length=11, unique=True, verbose_name='手机号')
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, verbose_name='性别')
birthday = models.DateField(verbose_name='出生日期', help_text='格式例如:2020-05-01')
grade = models.OneToOneField(Grade, on_delete=models.DO_NOTHING, verbose_name='管理班级')

def __str__(self) -> str:
return self.teacher_name

class Meta:
db_table = "teacher"
verbose_name_plural = "老师信息"
verbose_name = "老师信息"

创建迁移文件,并执行迁移操作,命令如下:

python manage.py makemigrations 
python migrate

查看数据库中的tearcher表,效果如下:

image-20260108175022324

4.使用 Base View 复用通用逻辑​

老师管理包含多个视图类:

🔒 试读结束

继续阅读完整内容

以上为免费预览。前往「Django + Vue 全栈课程」,查看后续完整讲解、案例演示和配套资料。

查看课程详情