From e1ff439acbbf4a8512974d256b06d29b1341d85b Mon Sep 17 00:00:00 2001 From: Richard Blechinger <hello@pretzelhands.com> Date: Thu, 18 Nov 2021 12:17:21 +0100 Subject: [PATCH] Add customizable ordering for timeslot queryset --- program/views.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/program/views.py b/program/views.py index 520e003b..639589af 100644 --- a/program/views.py +++ b/program/views.py @@ -522,17 +522,20 @@ class APITimeSlotViewSet(viewsets.ModelViewSet): def get_queryset(self): show_pk = int_or_none('show_pk', self.kwargs) schedule_pk = int_or_none('schedule_pk', self.kwargs) - # Filters # Return next 60 days by default start = datetime.combine(date.today(), time(0, 0)) end = start + timedelta(days=60) + if ('start' in self.request.query_params) and ('end' in self.request.query_params): start = datetime.combine(datetime.strptime(self.request.query_params.get('start'), '%Y-%m-%d').date(), time(0, 0)) end = datetime.combine(datetime.strptime(self.request.query_params.get('end'), '%Y-%m-%d').date(), time(23, 59)) + # Is this safe? + order = self.request.query_params.get('order', '-start') + # Endpoints # @@ -541,7 +544,7 @@ class APITimeSlotViewSet(viewsets.ModelViewSet): # Returns timeslots of the given show and schedule # if show_pk and schedule_pk: - return TimeSlot.objects.filter(show=show_pk, schedule=schedule_pk, start__gte=start, end__lte=end).order_by('start') + return TimeSlot.objects.filter(show=show_pk, schedule=schedule_pk, start__gte=start, end__lte=end).order_by(order) # # /shows/1/timeslots/ @@ -549,7 +552,7 @@ class APITimeSlotViewSet(viewsets.ModelViewSet): # Returns timeslots of the show # elif show_pk and schedule_pk is None: - return TimeSlot.objects.filter(show=show_pk, start__gte=start, end__lte=end).order_by('start') + return TimeSlot.objects.filter(show=show_pk, start__gte=start, end__lte=end).order_by(order) # # /timeslots/ @@ -557,7 +560,7 @@ class APITimeSlotViewSet(viewsets.ModelViewSet): # Returns all timeslots # else: - return TimeSlot.objects.filter(start__gte=start, end__lte=end).order_by('start') + return TimeSlot.objects.filter(start__gte=start, end__lte=end).order_by(order) def retrieve(self, request, *args, **kwargs): pk = int_or_none('pk', self.kwargs) -- GitLab