From baa6a974decb1982a01f7641499b5a1b2a56f946 Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Sun, 27 Oct 2019 14:36:27 +0100 Subject: [PATCH] Add short-hand for filtering lesson data by GET or POST query. Advances #3 and #34. --- biscuit/apps/chronos/models.py | 9 +++++++++ biscuit/apps/chronos/views.py | 7 +------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index b791e16d..49ba3b42 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -5,6 +5,7 @@ from django.core import validators from django.core.exceptions import ValidationError from django.db import models from django.db.models import Q +from django.http.request import QueryDict from django.utils.translation import ugettext_lazy as _ from biscuit.core.mixins import SchoolRelated @@ -48,6 +49,14 @@ class LessonPeriodQuerySet(models.QuerySet): return self.filter( Q(substitutions__room__pk=room, substitutions__week=models.F('_week')) | Q(room__pk=room)) + def filter_from_query(self, query_data: QueryDict): + if query_data.get('group', None): + return self.filter_group(int(query_data['group'])) + if query_data.get('teacher', None): + return self.filter_teacher(int(query_data['teacher'])) + if query_data.get('room', None): + return self.filter_room(int(query_data['room'])) + class TimePeriod(SchoolRelated): WEEKDAY_CHOICES = [ diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index b981c06e..af179ce6 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -33,12 +33,7 @@ def timetable(request: HttpRequest, year: Optional[int] = None, week: Optional[i # Incrementally filter lesson periods by GET parameters if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None): - if 'group' in request.GET and request.GET['group']: - lesson_periods = lesson_periods.filter_group(int(request.GET['group'])) - if 'teacher' in request.GET and request.GET['teacher']: - lesson_periods = lesson_periods.filter_teacher(int(request.GET['teacher'])) - if 'room' in request.GET and request.GET['room']: - lesson_periods = lesson_periods.room_filter(int(request.GET['room'])) + lesson_periods = lesson_periods.filter_from_query(request.GET) else: # Redirect to a selected view if no filter provided if request.user.person: -- GitLab