Я разрабатываю приложение для календаря в 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», я прошу прощения.