Обработка повторяющихся событий в приложении календаря 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)

По-видимому, все это вызывает проблемы с отображением уроков, которые принадлежат конкретному ученику. То, что я пытаюсь сделать, это отобразить таблицу, в которой показано имя ученика плюс все экземпляры запланированных уроков. Я вычисляю повторение динамически, чтобы избежать взрыва моей базы данных. Исключения из повторений (т.е. отмены уроков) хранятся в их собственных таблицах. Повторы проверяются по таблице отмененных уроков при создании повторений.

Смотрите мой код для генерации повторений (а также небольшой каталог того, какие проблемы это вызывает) здесь:Не могу получить ключ для отображения в шаблоне Django

Я относительно неопытен в Python и использую этот проект как способ разобраться во многих концепциях, поэтому, если я упускаю что-то, что по своей сути является «Pythonic», я прошу прощения.

5
задан Community 23 May 2017 в 12:02
поделиться