From 4c18f7ec6cf415a65fadd334db950972deea40ca Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Sun, 27 Oct 2019 13:41:56 +0100 Subject: [PATCH] Introduce ModelManager for LessonPeriod. Advances #33. --- biscuit/apps/chronos/models.py | 15 +++++++++++++++ biscuit/apps/chronos/views.py | 4 ---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index 93eb2fd0..ca292c56 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 d35a6686..ec6be60b 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} ) -- GitLab