From eee9eb08f347ea5c41333621598f141a90be0ceb Mon Sep 17 00:00:00 2001 From: "p412319.zxc" <2651231880@qq.com> Date: Thu, 30 May 2024 16:34:33 +0800 Subject: [PATCH] commit_04 --- SSCM/constants.py | 18 +++++++- SSCM/course/models.py | 100 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 1 deletion(-) diff --git a/SSCM/constants.py b/SSCM/constants.py index d53129b..02cd4af 100644 --- a/SSCM/constants.py +++ b/SSCM/constants.py @@ -1 +1,17 @@ -INVALID_KIND="Invalid kind.Kind should be one or teacher." \ No newline at end of file +INVALID_KIND = "Invalid kind.Kind should be one or teacher." + +COURSE_STATUS = { + 1: "未开始选课", + 2: "开始选课", + 3: "结束选课", + 4: "结课", + 5: "打分完成", +} + +COURSE_OPERATION = { + 1: "开始选课", + 2: "结束选课", + 3: "结课", + 4: "给分", + 5: "查看详情" +} diff --git a/SSCM/course/models.py b/SSCM/course/models.py index 71a8362..937ba38 100644 --- a/SSCM/course/models.py +++ b/SSCM/course/models.py @@ -1,3 +1,103 @@ from django.db import models +import datetime +from user.models import Student, Teacher +from constants import COURSE_STATUS, COURSE_OPERATION + # Create your models here. +def current_year(): + return datetime.date.today().year + + +class Course(models.Model): + credits = [(i, i) for i in range(1, 6)] + + semesters = [ + ('Autumn', '上'), + ('Spring', '下') + ] + + name = models.CharField(max_length=50, verbose_name="课程名") + introduction = models.CharField(max_length=250, verbose_name='介绍') + credit = models.IntegerField(verbose_name='学分', choices=credits) + max_number = models.IntegerField(verbose_name="课程最大人数") + + year = models.IntegerField(verbose_name='年份', default=current_year) + semester = models.CharField(max_length=20, verbose_name='学期', choices=semesters) + + 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) + + +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 + + +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 = [(i, i) for i in range(1, 6)] + + 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)