Add "level" filter

This commit is contained in:
Oliver Walters 2026-06-19 00:46:40 +00:00
parent a42535e080
commit dd582db45b
2 changed files with 31 additions and 1 deletions

View File

@ -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

View File

@ -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)