diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index b791e16d5d59fa49be48c8d4ecf1a9d13d48084c..49ba3b422b220c03febec7ad0a4f63f424fd54e2 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 b981c06e6fb0c6f3b710622c19e3c79a4d224206..af179ce6a2541e84d450aaa02675dcaa03b66cce 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: