我正在开发Django中的日历应用程序。处理Django日历应用程序中的重复事件
相关的模型结构如下:
class Lesson(models.Model):
RECURRENCE_CHOICES = (
(0, 'None'),
(1, 'Daily'),
(7, 'Weekly'),
(14, 'Biweekly')
)
frequency = models.IntegerField(choices=RECURRENCE_CHOICES)
lessonTime = models.TimeField('Lesson Time')
startDate = models.DateField('Start Date')
endDate = models.DateField('End Date')
student = models.ForeignKey(Student)
class CancelledLesson(models.Model):
lesson = models.ForeignKey(Lesson)
student = models.ForeignKey(Student)
cancelledLessonDate = models.DateField() # Actual date lesson has been cancelled, this is startDate + Frequency
class PaidLesson(models.Model):
lesson = models.ForeignKey(Lesson)
student = models.ForeignKey(Student)
actualDate = models.DateField() # Actual date lesson took place
paidAmt = models.DecimalField('Amount Paid', max_digits=5, decimal_places=2)
paidDate = models.DateField('date paid')
class CompositeLesson(models.Model):
# only used to aggregate lessons for individual lesson management
lesson = models.ForeignKey(Lesson)
student = models.ForeignKey(Student)
actualDate = models.DateTimeField()
isCancelled = models.BooleanField()
canLesson = models.ForeignKey(CancelledLesson, blank=True, null=True)
payLesson = models.ForeignKey(PaidLesson, blank=True, null=True)
显然,这是显示属于某个学生的经验教训都造成问题。我试图做的是显示一个表格,显示学生的名字加上预定课程的所有实例。我正在动态计算循环以避免炸毁我的数据库。重复例外(即课程取消)存储在他们自己的表格中。在生成重复时,会针对已取消的课程表检查重复次数。
见我的代码生成复发(还有什么问题,这是造成小目录)在这里:Can't get key to display in Django template
我与Python相对缺乏经验,而且现在用这个项目作为一个办法让我的围绕着很多概念,所以如果我错过了本质上是“Pythonic”的东西,我很抱歉。
好的,这是有道理的。我将如何去处理多次取消课程? –
在复发的情况下,通常更好地分离出另一个模型来处理每个日期和时间。就像'Lesson'和'LessonOccurrence'一样。 'LessonOccurrence'将有一个外键返回到它所属的'Lesson',然后是特定于日期的字段,即不是'student'等。 –