From dd582db45bdf0b44257c8446a341a6512acc623b Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Fri, 19 Jun 2026 00:46:40 +0000 Subject: [PATCH] Add "level" filter --- src/backend/InvenTree/part/api.py | 21 +++++++++++++++++++++ src/backend/InvenTree/part/serializers.py | 11 ++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 498ac3d8ce..8048175154 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -284,11 +284,32 @@ class CategoryDetail(CategoryMixin, OutputOptionsMixin, CustomRetrieveUpdateDest ) +class CategoryTreeFilter(FilterSet): + """Custom filterset class for the CategoryTree endpoint.""" + + class Meta: + """Metaclass options for this filterset.""" + + model = PartCategory + fields = ['level'] + + max_level = rest_filters.NumberFilter( + label=_('Max Level'), + method='filter_max_level', + help_text=_('Limit the depth of the category tree'), + ) + + def filter_max_level(self, queryset, name, value): + """Filter by the maximum depth of the category tree.""" + return queryset.filter(level__lte=value) + + class CategoryTree(ListAPI): """API endpoint for accessing a list of PartCategory objects ready for rendering a tree.""" queryset = PartCategory.objects.all() serializer_class = part_serializers.CategoryTree + filterset_class = CategoryTreeFilter filter_backends = SEARCH_ORDER_FILTER diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index d0ce0d43fa..19d5b39e56 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -188,7 +188,16 @@ class CategoryTree(InvenTree.serializers.InvenTreeModelSerializer): """Metaclass defining serializer fields.""" model = PartCategory - fields = ['pk', 'name', 'parent', 'icon', 'structural', 'subcategories'] + fields = [ + 'pk', + 'name', + 'description', + 'parent', + 'level', + 'icon', + 'structural', + 'subcategories', + ] subcategories = serializers.IntegerField(label=_('Subcategories'), read_only=True)