Skip to content
Snippets Groups Projects
Verified Commit b11115aa authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Add i_week() method to LessonPeriod's QuerySet. Advances #33 and #34.

parent 4c18f7ec
No related branches found
No related tags found
No related merge requests found
from datetime import datetime from datetime import datetime, timedelta
from typing import Dict, Optional, Tuple from typing import Dict, Optional, Tuple
from django.core import validators from django.core import validators
...@@ -25,6 +25,18 @@ class LessonPeriodManager(models.Manager): ...@@ -25,6 +25,18 @@ class LessonPeriodManager(models.Manager):
) )
class LessonPeriodQuerySet(models.QuerySet):
''' Overrides default QuerySet to add specific methods for lesson data. '''
def in_week(self, wanted_week: CalendarWeek):
return self.filter(
lesson__date_start__lte=wanted_week[0] + timedelta(days=1) * (models.F('period__weekday') - 1),
lesson__date_end__gte=wanted_week[0] + timedelta(days=1) * (models.F('period__weekday') - 1)
).extra(
select={'_week': wanted_week.week}
)
class TimePeriod(SchoolRelated): class TimePeriod(SchoolRelated):
WEEKDAY_CHOICES = [ WEEKDAY_CHOICES = [
(0, _('Sunday')), (0, _('Sunday')),
...@@ -160,7 +172,7 @@ class LessonSubstitution(SchoolRelated): ...@@ -160,7 +172,7 @@ class LessonSubstitution(SchoolRelated):
class LessonPeriod(SchoolRelated): class LessonPeriod(SchoolRelated):
objects = LessonPeriodManager() objects = LessonPeriodManager.from_queryset(LessonPeriodQuerySet)()
lesson = models.ForeignKey('Lesson', models.CASCADE, related_name='lesson_periods') lesson = models.ForeignKey('Lesson', models.CASCADE, related_name='lesson_periods')
period = models.ForeignKey('TimePeriod', models.CASCADE, related_name='lesson_periods') period = models.ForeignKey('TimePeriod', models.CASCADE, related_name='lesson_periods')
......
...@@ -3,7 +3,6 @@ from collections import OrderedDict ...@@ -3,7 +3,6 @@ from collections import OrderedDict
from typing import Optional from typing import Optional
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.db.models import F, Max, Min, Q
from django.http import HttpRequest, HttpResponse from django.http import HttpRequest, HttpResponse
from django.shortcuts import get_object_or_404, redirect, render from django.shortcuts import get_object_or_404, redirect, render
from django.views.decorators.cache import cache_page from django.views.decorators.cache import cache_page
...@@ -30,12 +29,7 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i ...@@ -30,12 +29,7 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i
else: else:
wanted_week = CalendarWeek() wanted_week = CalendarWeek()
lesson_periods = LessonPeriod.objects.filter( lesson_periods = LessonPeriod.objects.in_week(wanted_week)
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)
).extra(
select={'_week': wanted_week.week}
)
if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None): if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None):
# Incrementally filter lesson periods by GET parameters # Incrementally filter lesson periods by GET parameters
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment