如何创建在时间表中实施课程的Django模型?

时间:2018-06-27 15:12:27

标签: django python-3.x web django-models

我正在尝试为Django创建课堂时间表系统。我有一个想法,我仍然想知道我是否会工作。这是代表课堂上每节课的模型;第1课(7:00 AM-7:50),第2课(7:50-8:40)等。

class Lesson(models.Model):
start = models.TimeField()
end = models.TimeField()
lesson = models.PositiveSmallIntegerField(choices=[(i, i) for i in range(1, 10)], primary_key=True)

class Meta:
    verbose_name = 'lesson'
    ordering = ['lesson']

def __str__(self):
    return "{}".format(self.lesson)

我在这里需要从上午7:00开始持续10课,每节课持续50分钟。我很乐意在这里提供您宝贵的建议。谢谢。

1 个答案:

答案 0 :(得分:0)

听起来您要尝试创建10个课程对象,每个对象都有自己的开始和结束时间。在这种情况下,我将像这样建立模型:

class Lesson(models.Model):
    start = models.TimeField()
    end = models.TimeField()
    title = models.CharField(max_length=30, blank=True, null=True)

    def __str__(self):
        start_time = self.start.strftime("%H:%M")  # '07:00'
        end_time = self.end.strftime("%H:%M")      # '07:50'
        return "{} ({} - {})".format(self.title, start_time, end_time)
                                                   # 'Course 1 (07:00 - 07:50)

然后,您可以创建一个单独的脚本来填充对象。

courses = ['Course 1', 'Course 2', ..., 'Course 10']
start_time = datetime.time(7,0)   # 07:00
delta = datetime.timedelta(minutes=50)
for course in courses:
    date_time = datetime.datetime.combine(datetime.date.today(), start_time)
    time_diff = date_time + delta
    end_time = time_diff.time()
    lesson = Lesson(start=start_time, end=end_time, title=course)
    lesson.save()

    start_time = end_time

这将在您的数据库中创建10条课记录,每条记录连续50分钟。

如果您希望用户从下拉菜单中选择课程,则仍然可以使用Lesson.objects.values('title').distinct()

使用数据库中的唯一课程标题来填充菜单。