Django 小实例S1 简易学生选课管理系统 9 创建课程模型(model)
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_text
和get_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)的更多相关文章
- Django 小实例S1 简易学生选课管理系统 3 创建用户模型(model)
Django 小实例S1 简易学生选课管理系统 第3节--创建用户模型(model) 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新 ...
- Django 小实例S1 简易学生选课管理系统 10 老师课程业务实现
Django 小实例S1 简易学生选课管理系统 第10节--老师课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,老师将要使 ...
- Django 小实例S1 简易学生选课管理系统 12 CSS样式完善
Django 小实例S1 简易学生选课管理系统 第12节--CSS样式完善 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块的逻辑代码到这里 ...
- Django 小实例S1 简易学生选课管理系统 11 学生课程业务实现
Django 小实例S1 简易学生选课管理系统 第11节--学生课程业务实现 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 课程模块中,学生需要拥 ...
- Django 小实例S1 简易学生选课管理系统 8 CSS样式优化
Django 小实例S1 简易学生选课管理系统 第8节--CSS样式优化 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 前面的几节下来,用户模块基 ...
- Django 小实例S1 简易学生选课管理系统 7 修改个人信息
Django 小实例S1 简易学生选课管理系统 第7节--修改个人信息 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 用户模块除了注册登录之外,还 ...
- Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑
Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...
- Django 小实例S1 简易学生选课管理系统 2 新建项目(project)并进行设置
Django 小实例S1 简易学生选课管理系统 第2节--新建项目(project)并进行设置 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 0 ...
- Django 小实例S1 简易学生选课管理系统 4 实现登录页面
Django 小实例S1 简易学生选课管理系统 第4节--实现登录页面 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 本文涉及到的新的额外知识点: ...
随机推荐
- 分布式、微服务必须配个日志管理系统才优秀,Exceptionless走起~~~
前言 在真实的项目中,不管是功能日志.错误日志还是异常日志,已经是项目的重要组成部分.在原始的单体架构,通常看日志的方式简单粗暴,直接登录到服务器,把日志文件拷贝下来进行分析:而如今分布式.微服务架构 ...
- HttpRunner3.X - 全面讲解如何落地项目实战
一.前言 接触httprunner框架有一段时间了,也一直探索如何更好的落地到项目上,本篇主要讲述如何应用到实际的项目中,达到提升测试效率的目的. 1.项目难题 这个月开始忙起来了,接了个大项目,苦不 ...
- SpringBoot入门01-环境部署
随笔目录: 环境准备 创建过程 编码试行 环境准备 如果编辑器是还没有配置过相关环境的,在用SpringBoot开发项目的时候,需要先环境,spring boot官网建议的开发工具是: STS或Ide ...
- 攻防世界XCTF-WEB入门全通关
为了更好的体验,请见我的---->个人博客 XCTF的web块入门区非常简单,适合一些刚接触安全或者对网络安全常识比较了解的同学在安全搞累之余娱乐娱乐. 其主要考察下面几点: 基本的PHP.Py ...
- Visual Studio 安装 C++
Visual Studio 安装 C++
- Scrum Meeting 最终总结
[软工小白菜]Scrum Meeting 最终总结 2020/4/28 一.会议内容 1.工作及计划 组员代号 完成的工作 明日计划 炎龙 1.整合了整个程序,生成了apk并且上传审核 无 风鹰 1. ...
- 2020BUAA软工个人博客作业-软件案例分析
2020BUAA软工个人博客作业-软件案例分析 17373010 杜博玮 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业-软件案例分 ...
- java中延时队列的使用
最近遇到这么一个需求,程序中有一个功能需要发送短信,当满足某些条件后,如果上一步的短信还没有发送出去,那么应该取消这个短信的发送.在翻阅java的api后,发现java中有一个延时队列可以解决这个问题 ...
- 微信小程序 scroll-view 完成上拉加载更多
我们经常在软件客户端上看到这么一个功能,当我们阅读信息浏览到文章的末尾时,通常会加载出更多的信息.比如,我们在简书客户端上浏览推荐文章时,浏览到屏幕的末尾,此时又加载出了另一页的推荐文章,即实现了上拉 ...
- Python:Ubuntu上出现错误 Could not load dynamic library 'libnvinfer.so.6' / 'libnvinfer_plugin.so.6'
运行一个py文件,出现如下的错误,原因是没有找到 libnvinfer.so.6 相关库的文件. 1 2021-01-04 18:41:17.324477: W tensorflow/stream_e ...