diff --git a/program/filters.py b/program/filters.py index d442c2acc34d4669dcc5c90c4ad08bcf857b82a2..656d4804e1513aa49023f2ba7465db7338fa837d 100644 --- a/program/filters.py +++ b/program/filters.py @@ -334,3 +334,14 @@ class VirtualTimeslotFilterSet(filters.FilterSet): class Meta: model = models.TimeSlot fields = ["start", "end", "include_virtual"] + + +class PlaylistFileUsageFilter(filters.FilterSet): + file_id = filters.NumberFilter( + field_name="entries__file_id", + help_text="Return only playlists that use to the specified file ID.", + ) + + class Meta: + fields = ("file_id",) + model = models.Playlist diff --git a/program/views.py b/program/views.py index edc0b304a8ece13e6f036f61f31856d783e162fb..deb1577ebcba4c8afb43d28a297ec1a4339b4257 100644 --- a/program/views.py +++ b/program/views.py @@ -1700,6 +1700,7 @@ class APIPlaylistViewSet(viewsets.ModelViewSet): class APIPlaylistUsageViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): + filterset_class = filters.PlaylistFileUsageFilter serializer_class = PlaylistSerializer def get_queryset(self): @@ -1710,15 +1711,3 @@ class APIPlaylistUsageViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): return Playlist.objects.none() return Playlist.objects.all() - - def list(self, request, *args, **kwargs): - """The list filters the playlists by the `file_id` they refer to.""" - - if file_id := request.query_params.get("file_id"): - queryset = self.get_queryset().filter(entries__file_id=int(file_id)) - else: - queryset = self.get_queryset() - - serializer = PlaylistSerializer(queryset, many=True) - - return Response(serializer.data)