diff --git a/program/filters.py b/program/filters.py index 0ae95121b4c991b790fe90a0740421f4cdd83cee..f530bf1de61e0a58503cd3333276baa0b2e97c40 100644 --- a/program/filters.py +++ b/program/filters.py @@ -299,7 +299,8 @@ class EpisodeFilterSet(StaticFilterHelpTextMixin, filters.FilterSet): field_name="timeslots", help_text="Return only episodes that belong to the specified timeslot(s).", ) - has_timeslots = filters.BooleanFilter( + has_timeslots = StaticQueryBooleanFilter( + query=Exists(models.TimeSlot.objects.filter(episode=OuterRef("pk"))), label="Has timeslots", help_text="Returns only timeslots that either have or have not any timeslots.", ) diff --git a/program/views.py b/program/views.py index e01476a3197004ea639a5717da79fa9c9a4b526a..cc84c93415ab4e92cb435488bd62dc20dc3f087e 100644 --- a/program/views.py +++ b/program/views.py @@ -46,7 +46,6 @@ from rest_framework.response import Response from django.conf import settings from django.contrib.auth.models import User from django.db import IntegrityError -from django.db.models import Q from django.http import HttpResponseRedirect, JsonResponse from django.shortcuts import get_object_or_404 from django.utils import timezone @@ -1449,7 +1448,7 @@ class EpisodeOwnershipPermission(ShowOwnershipPermission): destroy=extend_schema(summary="Delete an existing episode."), ) class APIEpisodeViewSet(viewsets.ModelViewSet): - queryset = Episode.objects.all().annotate(has_timeslots=Q(timeslots__isnull=True)).distinct() + queryset = Episode.objects.all() pagination_class = LimitOffsetPagination serializer_class = EpisodeSerializer filter_backends = [DjangoFilterBackend, drf_filters.SearchFilter]