diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index 93eb2fd0d8909bd4a3c191bc07517609187bcb3d..ca292c56d4ed024ad6d8703963ab0a94c58f6b16 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -12,6 +12,19 @@ from biscuit.core.mixins import SchoolRelated from .util import CalendarWeek +class LessonPeriodManager(models.Manager): + ''' Manager adding specific methods to lesson periods. ''' + + def get_queryset(self): + ''' Ensures all related lesson data is loaded as well. ''' + + return super().get_queryset().select_related( + 'lesson', 'lesson__subject', 'period', 'room' + ).prefetch_related( + 'lesson__groups', 'lesson__teachers', 'substitutions' + ) + + class TimePeriod(SchoolRelated): WEEKDAY_CHOICES = [ (0, _('Sunday')), @@ -147,6 +160,8 @@ class LessonSubstitution(SchoolRelated): class LessonPeriod(SchoolRelated): + objects = LessonPeriodManager() + lesson = models.ForeignKey('Lesson', models.CASCADE, related_name='lesson_periods') period = models.ForeignKey('TimePeriod', models.CASCADE, related_name='lesson_periods') diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index d35a6686e102f0d85a7a8fc9967ef369f73328d8..ec6be60b76428744e2ed115301f06a8da527aa87 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -33,10 +33,6 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i lesson_periods = LessonPeriod.objects.filter( lesson__date_start__lte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1), lesson__date_end__gte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1) - ).select_related( - 'lesson', 'lesson__subject', 'period', 'room' - ).prefetch_related( - 'lesson__groups', 'lesson__teachers', 'substitutions' ).extra( select={'_week': wanted_week.week} )