diff --git a/biscuit/apps/chronos/forms.py b/biscuit/apps/chronos/forms.py index 718bfe13a05927fc956c3fac9ac42d3e081295a4..a242f060ae59e8b28bf0e064dc071f2a56f27fbc 100644 --- a/biscuit/apps/chronos/forms.py +++ b/biscuit/apps/chronos/forms.py @@ -10,10 +10,10 @@ from .models import Room class SelectForm(forms.Form): group = forms.ModelChoiceField( queryset=Group.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0), - label=_('Group')) + label=_('Group'), required=False) teacher = forms.ModelChoiceField( queryset=Person.objects.annotate(lessons_count=Count('lessons')).filter(lessons_count__gt=0), - label=_('Teacher')) + label=_('Teacher'), required=False) room = forms.ModelChoiceField( queryset=Room.objects.annotate(lessons_count=Count('lesson_periods')).filter(lessons_count__gt=0), - label=_('Room')) + label=_('Room'), required=False) diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py index a6cb52f17fe6f0da935ca8f9a82161ddbdc2c666..16e2352040b7b33d2f5998f3db4cc675abf6975b 100644 --- a/biscuit/apps/chronos/models.py +++ b/biscuit/apps/chronos/models.py @@ -101,7 +101,7 @@ class LessonPeriod(models.Model): lesson = models.ForeignKey('Lesson', models.CASCADE) period = models.ForeignKey('TimePeriod', models.CASCADE) - room = models.ForeignKey('Room', models.CASCADE, null=True) + room = models.ForeignKey('Room', models.CASCADE, null=True, related_name='lesson_periods') def get_substitution(self, week: Optional[int] = None) -> LessonSubstitution: wanted_week = week or current_week() diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py index d7c22fcc90a43657d28ca27b484f3d3429d08d55..a146181f95cc72b8747dca0e5a3e2717f4d776a7 100644 --- a/biscuit/apps/chronos/views.py +++ b/biscuit/apps/chronos/views.py @@ -20,17 +20,17 @@ from .util import current_week def timetable(request: HttpRequest) -> HttpResponse: context = {} - if request.GET: - lesson_periods = LessonPeriod.objects.all() + lesson_periods = LessonPeriod.objects.all() + if request.GET: # Incrementally filter lesson periods by GET parameters - if 'group' in request.GET: + if 'group' in request.GET and request.GET['group']: lesson_periods = lesson_periods.filter( lesson__groups__pk=int(request.GET['group'])) - if 'teacher' in request.GET: + if 'teacher' in request.GET and request.GET['teacher']: lesson_periods = lesson_periods.filter( lesson__teachers__pk=int(request.GET['teacher'])) - if 'room' in request.GET: + if 'room' in request.GET and request.GET['room']: lesson_periods = lesson_periods.filter( room__pk=int(request.GET['room'])) else: @@ -48,7 +48,7 @@ def timetable(request: HttpRequest) -> HttpResponse: {})[lesson_period.period.period] = lesson_period # Determine overall first and last day and period - min_max = TimePeriod.objects..aggregate( + min_max = TimePeriod.objects.aggregate( Min('period'), Max('period'), Min('weekday'), Max('weekday'))