diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index e5a25889ef..8cc422bc20 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,13 +1,16 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 309 +INVENTREE_API_VERSION = 310 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v310 - 2025-02-14 : https://github.com/inventree/InvenTree/pull/9077 + - Adds 'is_variant' filter to the Part list API + v309 - 2025-02-02 : https://github.com/inventree/InvenTree/pull/9008 - Bug fixes for the "Part" serializer - Fixes for data import API endpoints diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index f5ab295cb7..582046c002 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -895,6 +895,14 @@ class PartFilter(rest_filters.FilterSet): model = Part fields = ['revision_of'] + is_variant = rest_filters.BooleanFilter( + label=_('Is Variant'), method='filter_is_variant' + ) + + def filter_is_variant(self, queryset, name, value): + """Filter by whether the Part is a variant or not.""" + return queryset.filter(variant_of__isnull=not str2bool(value)) + is_revision = rest_filters.BooleanFilter( label=_('Is Revision'), method='filter_is_revision' ) diff --git a/src/frontend/src/tables/part/PartTable.tsx b/src/frontend/src/tables/part/PartTable.tsx index f3c83e5d01..5d90183639 100644 --- a/src/frontend/src/tables/part/PartTable.tsx +++ b/src/frontend/src/tables/part/PartTable.tsx @@ -269,6 +269,12 @@ function partTableFilters(): TableFilter[] { description: t`Filter by parts which are templates`, type: 'boolean' }, + { + name: 'is_variant', + label: t`Is Variant`, + description: t`Filter by parts which are variants`, + type: 'boolean' + }, { name: 'is_revision', label: t`Is Revision`,