diff --git a/program/filters.py b/program/filters.py index 188133acb2d3d535c47d38466170a5b4a9f0ddef..9be299df8f04c83fa1c5fe765e4624a6dceb491b 100644 --- a/program/filters.py +++ b/program/filters.py @@ -199,3 +199,12 @@ class TimeSlotFilterSet(filters.FilterSet): def clean_end(self): end = self.cleaned_data.get("end", None) return end or self.cleaned_data["start"] + datetime.timedelta(days=60) + + +class ActiveFilterSet(StaticFilterHelpTextMixin, filters.FilterSet): + active = filters.BooleanFilter(field_name="is_active") + + class Meta: + fields = [ + "active", + ] diff --git a/program/views.py b/program/views.py index 6fecaef580e3eb167968242f8c15fe26588fcacd..4293d3546f73539e9c955834f5f87d5f4cb1b66b 100644 --- a/program/views.py +++ b/program/views.py @@ -820,99 +820,67 @@ class APINoteViewSet(viewsets.ModelViewSet): return Response(status=status.HTTP_204_NO_CONTENT) -class ActiveInactiveViewSet(viewsets.ModelViewSet): - permission_classes = [permissions.DjangoModelPermissionsOrAnonReadOnly] - - def get_queryset(self: viewsets.ModelViewSet): - """Filters""" - - if self.request.query_params.get("active") == "true": - return self.queryset.model.objects.filter(is_active=True) - - if self.request.query_params.get("active") == "false": - return self.queryset.model.objects.filter(is_active=False) - - return self.queryset.model.objects.all() +class ActiveFilterMixin: + filter_class = filters.ActiveFilterSet -class APICategoryViewSet(ActiveInactiveViewSet): +class APICategoryViewSet(ActiveFilterMixin, viewsets.ModelViewSet): """ - /categories/ returns all categories (GET, POST) - /categories/?active=true returns all active categories (GET) - /categories/?active=false returns all inactive categories (GET) - /categories/{pk} Returns a category by its ID (GET, PUT, DELETE) + Returns a list of categories. """ queryset = Category.objects.all() serializer_class = CategorySerializer -class APITypeViewSet(ActiveInactiveViewSet): +class APITypeViewSet(ActiveFilterMixin, viewsets.ModelViewSet): """ - /types/ returns all types (GET, POST) - /types/?active=true returns all active types (GET) - /types/?active=false returns all inactive types (GET) - /types/{pk} returns a type by its ID (GET, PUT, DELETE) + Returns a list of types. """ queryset = Type.objects.all() serializer_class = TypeSerializer -class APITopicViewSet(ActiveInactiveViewSet): +class APITopicViewSet(ActiveFilterMixin, viewsets.ModelViewSet): """ - /topics/: Returns all topics (GET, POST) - /topics/?active=true Returns all active topics (GET) - /topics/?active=false Returns all inactive topics (GET) - /topics/{pk}: Returns a topic by its ID (GET, PUT, DELETE) + Returns a list of topics. """ queryset = Topic.objects.all() serializer_class = TopicSerializer -class APIMusicFocusViewSet(ActiveInactiveViewSet): +class APIMusicFocusViewSet(ActiveFilterMixin, viewsets.ModelViewSet): """ - /musicfocus/ returns all music focuses (GET, POST) - /musicfocus/?active=true: returns all active music focuses (GET) - /musicfocus/?active=false: returns all inactive music focuses (GET) - /musicfocus/{pk}: returns a music focus by its ID (GET, PUT, DELETE) + Returns a list of music focuses. """ queryset = MusicFocus.objects.all() serializer_class = MusicFocusSerializer -class APIFundingCategoryViewSet(ActiveInactiveViewSet): +class APIFundingCategoryViewSet(ActiveFilterMixin, viewsets.ModelViewSet): """ - /fundingcategories/: returns all funding categories (GET, POST) - /fundingcategories/?active=true returns all active funding categories (GET) - /fundingcategories/?active=false returns all inactive funding categories (GET) - /fundingcategories/{pk} returns a funding category by its ID (GET, PUT, DELETE) + Returns a list of funding categories. """ queryset = FundingCategory.objects.all() serializer_class = FundingCategorySerializer -class APILanguageViewSet(ActiveInactiveViewSet): +class APILanguageViewSet(ActiveFilterMixin, viewsets.ModelViewSet): """ - /languages/ returns all languages (GET, POST) - /languages/?active=true returns all active languages (GET) - /languages/?active=false returns all inactive languages (GET) - /languages/{pk} returns a language by its ID (GET, PUT, DELETE) + Returns a list of languages. """ queryset = Language.objects.all() serializer_class = LanguageSerializer -class APIHostViewSet(ActiveInactiveViewSet): +class APIHostViewSet(ActiveFilterMixin, viewsets.ModelViewSet): """ - /hosts/ returns all hosts (GET, POST) - /hosts/?active=true returns all active hosts (GET) - /hosts/?active=false returns all inactive hosts (GET) - /hosts/{pk} returns a host by its ID (GET, PUT, DELETE) + Returns a list of hosts. """ queryset = Host.objects.all()