Django 小实例S1 简易学生选课管理系统 第9节——创建课程模型(model)

点击查看教程总目录

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

对于课程模块,需要:

  • 课程表
  • 学生课程表:学生和课程的关系表
  • 时刻表:课程上课时间设置

由于课程会有多个状态,这个可以先在constants.py中去记录好(即添加代码如下)

COURSE_STATUS = {
1: "未开始选课",
2: "开始选课",
3: "结束选课",
4: "结课",
5: "打分完成",
} COURSE_OPERATION = {
1: "开始选课",
2: "结束选课",
3: "结课",
4: "给分",
5: "查看详情"
}

然后在course/models.py中导入下面会需要的所有库

from django.db import models
import datetime
from user.models import Student, Teacher
from constants import COURSE_STATUS, COURSE_OPERATION

1 添加课程模型

course/models.py中添加代码如下

def current_year():
# refer: https://stackoverflow.com/questions/49051017/year-field-in-django/49051348
return datetime.date.today().year class Course(models.Model):
credits = [
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
]
semesters = [
("Autumn", "上"),
("Spring", "下")
]
name = models.CharField(max_length=50, verbose_name="课程名")
introduction = models.CharField(max_length=250, verbose_name="介绍")
credit = models.IntegerField(verbose_name="学分")
max_number = models.IntegerField(verbose_name="课程最大人数") year = models.IntegerField(verbose_name="年份", default=current_year)
semester = models.CharField(max_length=20, verbose_name="学期", choices=semesters) # 未开始选课, 1
# 开始选课,未结束选课 2
# 结束选课, 3
# 结课 4
# 已打完分 5
status = models.IntegerField(verbose_name="课程状态", default=1) teacher = models.ForeignKey(Teacher, verbose_name="课程教师", on_delete=models.CASCADE) def get_status_text(self):
return COURSE_STATUS[self.status] def get_op_text(self):
return COURSE_OPERATION[self.status] def get_current_count(self):
courses = StudentCourse.objects.filter(course=self, with_draw=False)
return len(courses) def get_schedules(self):
schedules = Schedule.objects.filter(course=self)
return schedules def __str__(self):
return "%s (%s)" % (self.name, self.teacher.name)

补充说明: get_status_textget_op_text方法是为了方便在模板中调用。

2 添加课程时刻表模型

course/models.py中添加代码如下

def weekday_choices():
weekday_str = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
return [(i+1, weekday_str[i]) for i in range(7)] class Schedule(models.Model):
weekday = models.IntegerField(choices=weekday_choices(), verbose_name="日期")
start_time = models.TimeField(verbose_name="上课时间")
end_time = models.TimeField(verbose_name="下课时间")
location = models.CharField(max_length=100, verbose_name="上课地点")
remarks = models.CharField(max_length=100, verbose_name="备注", null=True, blank = True) start_week = models.IntegerField(verbose_name="第几周开始")
end_week = models.IntegerField(verbose_name="第几周结束") intervals = [
(1, "无间隔"),
(2, "每隔一周上一次")
]
week_interval = models.IntegerField(verbose_name="周间隔", choices=intervals, default=1) course = models.ForeignKey(Course, verbose_name="课程名", on_delete=models.CASCADE) def __str__(self):
s = "第%s周-第%s周 " % (self.start_week, self.end_week)
if self.week_interval == 2:
s += "隔一周 "
s += "%s %s-%s " % (self.get_weekday_display(), self.start_time.strftime("%H:%M"),
self.end_time.strftime("%H:%M"))
s += "在%s" % self.location
if self.remarks:
s += " %s" % self.remarks
return s

3 添加学生课程关系表模型

course/models.py中添加代码如下

class StudentCourse(models.Model):
create_time = models.DateTimeField(auto_now=True)
with_draw = models.BooleanField(default=False)
with_draw_time = models.DateTimeField(default=None, null=True) scores = models.IntegerField(verbose_name="成绩", null=True)
comments = models.CharField(max_length=250, verbose_name="老师评价", null=True) rates = [
(1, 1),
(2, 2),
(3, 3),
(4, 4),
(5, 5),
] rating = models.IntegerField(verbose_name="学生评分", choices=rates, null=True, help_text="5分为最满意,最低分是1分")
assessment = models.CharField(max_length=250, verbose_name="学生评价", null=True) student = models.ForeignKey(Student, on_delete=models.CASCADE)
course = models.ForeignKey(Course, on_delete=models.CASCADE)

4 建立(更新)数据库

第三节第三部分

简单复述一遍,即在项目文件夹下打开命令行窗口,执行:

python manage.py makemigrations
python manage.py migrate

Django 小实例S1 简易学生选课管理系统 9 创建课程模型(model)的更多相关文章

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

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

  2. Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现

    Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...

  3. Django 小实例S1 简易学生选课管理系统 12 CSS样式完善

    Django 小实例S1 简易学生选课管理系统 第12节--CSS样式完善 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块的逻辑代码到这里 ...

  4. Django 小实例S1 简易学生选课管理系统 11 学生课程业务实现

    Django 小实例S1 简易学生选课管理系统 第11节--学生课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,学生需要拥 ...

  5. Django 小实例S1 简易学生选课管理系统 8 CSS样式优化

    Django 小实例S1 简易学生选课管理系统 第8节--CSS样式优化 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 前面的几节下来,用户模块基 ...

  6. Django 小实例S1 简易学生选课管理系统 7 修改个人信息

    Django 小实例S1 简易学生选课管理系统 第7节--修改个人信息 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 用户模块除了注册登录之外,还 ...

  7. Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑

    Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...

  8. Django 小实例S1 简易学生选课管理系统 2 新建项目(project)并进行设置

    Django 小实例S1 简易学生选课管理系统 第2节--新建项目(project)并进行设置 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 0 ...

  9. Django 小实例S1 简易学生选课管理系统 4 实现登录页面

    Django 小实例S1 简易学生选课管理系统 第4节--实现登录页面 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新的额外知识点: ...

随机推荐

  1. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  2. JDBC连接mariadb时使用依赖

    问题描述:最近在尝试使用mariadb,使用idea开发,在使用jdbc连接数据库的时候,一般会用到driver,user,pwd,url,使用mysql的例子太多了,也有很多详细的教程,但是现在尝试 ...

  3. MyBatis 面试复习整理

    MyBatis MyBatis 是一款优秀的ORM(对象关系映射)框架,可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中.它内部封装了 JDBC ,使开发者只需要关注 SQL语句本身, ...

  4. MySQL where子句的使用

    MySQL WHERE 子句 我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是 ...

  5. Windows下的程序及热键监视神器——Spy++

    Windows下的程序及热键监视神器--Spy++ 背景 在使用Windows的时候,偶尔会发现某些应用程序的热键不生效了:又或是桌面弹出了弹框却并不知道这个弹框来自何处.例如,本人最近使用Vim的时 ...

  6. 中国唯一入选 Forrester 领导者象限,阿里云 Serverless 全球领先

    3 月 26 日消息,权威咨询机构 Forrester 发布 2021 年第一季度 FaaS 平台评估报告,阿里云函数计算凭借在产品能力.安全性.战略愿景和市场规模等方面的优势脱颖而出,产品能力位列全 ...

  7. 前段之BOM ----DOM

    一.介绍 BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行"对话". DOM (Document Object ...

  8. NOIP 模拟 七十七

    100+60+95+30; T4 一个变量打错挂了40.. T1 最大或 考虑从高到低枚举的二进制位,然后和的对应二进制位进行比较.如果两 者相同,那么不论怎么选择,,答案在这个位置上的值一定和在这个 ...

  9. SpringBoot入门07-Thymeleaf中显示ajax请求到的数据

    Thymeleaf中显示ajax请求所需依赖 <!--所需依赖--><dependency> <groupId>org.springframework.boot&l ...

  10. FastAPI 学习之路(十一)请求体 - 嵌套模型

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...