From 5c14982db388a15332afdb62c47566191cde244a Mon Sep 17 00:00:00 2001 From: Konrad Mohrfeldt <konrad.mohrfeldt@farbdev.org> Date: Thu, 27 Mar 2025 18:10:21 +0100 Subject: [PATCH] feat: add ids and isShowHost filter to profiles api --- program/filters.py | 21 +++++++++++++++++++++ program/views.py | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/program/filters.py b/program/filters.py index f530bf1..dd78807 100644 --- a/program/filters.py +++ b/program/filters.py @@ -71,6 +71,16 @@ class ShowOrderingFilter(filters.OrderingFilter): return qs.order_by(*ordering) +class DefaultFilterSet(filters.FilterSet): + ids = IntegerInFilter( + field_name="id", + help_text="Return only entities matching the specified id(s).", + ) + + class Meta: + fields = ("ids",) + + class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet): ids = IntegerInFilter( field_name="id", @@ -408,3 +418,14 @@ class ImageFilterSet(filters.FilterSet): class Meta: fields = ("ids",) + + +class ProfileFilterSet(DefaultFilterSet): + is_show_host = StaticQueryBooleanFilter( + query=Exists(models.Show.objects.filter(hosts=OuterRef("pk"))), + label="Is show host", + help_text="Return only profiles that are hosts of a show.", + ) + + class Meta: + fields = DefaultFilterSet.Meta.fields + ("is_show_host",) diff --git a/program/views.py b/program/views.py index 96393ec..18cbdef 100644 --- a/program/views.py +++ b/program/views.py @@ -1554,7 +1554,8 @@ class APIProfileViewSet(ActiveFilterMixin, viewsets.ModelViewSet): queryset = Profile.objects.all().order_by("-is_active", "name") serializer_class = ProfileSerializer pagination_class = LimitOffsetPagination - filter_backends = [drf_filters.SearchFilter] + filter_backends = [DjangoFilterBackend, drf_filters.SearchFilter] + filterset_class = filters.ProfileFilterSet search_fields = ["name", "email"] def get_serializer_context(self): -- GitLab