From 27ed511092b6ccf6b0fb065d7659ade5e27db5ce Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Tue, 14 Oct 2025 22:31:40 +0200 Subject: [PATCH] remove new duplication --- src/backend/InvenTree/InvenTree/serializers.py | 6 ++++++ src/backend/InvenTree/build/serializers.py | 4 ---- src/backend/InvenTree/company/serializers.py | 4 ---- src/backend/InvenTree/order/serializers.py | 11 ----------- src/backend/InvenTree/part/serializers.py | 5 ----- src/backend/InvenTree/stock/serializers.py | 5 ----- src/backend/InvenTree/users/serializers.py | 1 - 7 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 820eda57ef..8dc3d4f33c 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -53,6 +53,12 @@ class PathScopedMixin: def __init__(self, *args, **kwargs): """Initialization routine for the serializer.""" + # add list_serializer_class to meta if not present + if not isinstance(self, FilterableListSerializer) and ( + not hasattr(self.Meta, 'list_serializer_class') + ): + self.Meta.list_serializer_class = FilterableListSerializer + self.gather_filters(kwargs) super().__init__(*args, **kwargs) self.do_filtering(*args, **kwargs) diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 0db842f51c..0d66a64b06 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -34,7 +34,6 @@ from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( CfCharField, CfIntegerField, - FilterableListSerializer, InvenTreeDecimalField, InvenTreeModelSerializer, NotesFieldMixin, @@ -112,7 +111,6 @@ class BuildSerializer( 'status_text', 'level', ] - list_serializer_class = FilterableListSerializer reference = serializers.CharField(required=True) @@ -1204,7 +1202,6 @@ class BuildItemSerializer( 'bom_part_id', 'bom_part_name', ] - list_serializer_class = FilterableListSerializer # Export-only fields bom_reference = serializers.CharField( @@ -1355,7 +1352,6 @@ class BuildLineSerializer( 'build_detail', ] read_only_fields = ['build', 'bom_item', 'allocations'] - list_serializer_class = FilterableListSerializer # Build info fields build_reference = serializers.CharField( diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index 36243b0ed2..49ae7d85f0 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -19,7 +19,6 @@ from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.ready import isGeneratingSchema from InvenTree.serializers import ( CfCharField, - FilterableListSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeImageSerializerField, @@ -277,7 +276,6 @@ class ManufacturerPartSerializer( 'notes', 'tags', ] - list_serializer_class = FilterableListSerializer tags = TagListSerializerField(required=False) @@ -389,7 +387,6 @@ class SupplierPartSerializer( 'barcode_hash', 'pack_quantity_native', ] - list_serializer_class = FilterableListSerializer tags = TagListSerializerField(required=False) @@ -554,7 +551,6 @@ class SupplierPriceBreakSerializer( 'supplier_detail', 'updated', ] - list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index 51dfa36ecd..3a9f7a263b 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -45,7 +45,6 @@ from InvenTree.helpers import ( ) from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( - FilterableListSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeModelSerializer, @@ -332,7 +331,6 @@ class PurchaseOrderSerializer( 'supplier': {'required': True}, 'order_currency': {'required': False}, } - list_serializer_class = FilterableListSerializer def skip_create_fields(self): """Skip these fields when instantiating a new object.""" @@ -502,7 +500,6 @@ class PurchaseOrderLineItemSerializer( 'internal_part', 'internal_part_name', ] - list_serializer_class = FilterableListSerializer def skip_create_fields(self): """Return a list of fields to skip when creating a new object.""" @@ -710,7 +707,6 @@ class PurchaseOrderExtraLineSerializer( """Metaclass options.""" model = order.models.PurchaseOrderExtraLine - list_serializer_class = FilterableListSerializer class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): @@ -985,7 +981,6 @@ class SalesOrderSerializer( ]) read_only_fields = ['status', 'creation_date', 'shipment_date'] extra_kwargs = {'order_currency': {'required': False}} - list_serializer_class = FilterableListSerializer def skip_create_fields(self): """Skip these fields when instantiating a new object.""" @@ -1086,7 +1081,6 @@ class SalesOrderLineItemSerializer( 'building', 'on_order', ] - list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -1244,7 +1238,6 @@ class SalesOrderShipmentSerializer( 'link', 'notes', ] - list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -1298,7 +1291,6 @@ class SalesOrderAllocationSerializer(PathScopedMixin, InvenTreeModelSerializer): 'shipment_detail', ] read_only_fields = ['line', ''] - list_serializer_class = FilterableListSerializer part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) order = serializers.PrimaryKeyRelatedField( @@ -1823,7 +1815,6 @@ class ReturnOrderSerializer( 'total_price', ]) read_only_fields = ['creation_date'] - list_serializer_class = FilterableListSerializer def skip_create_fields(self): """Skip these fields when instantiating a new object.""" @@ -2022,7 +2013,6 @@ class ReturnOrderLineItemSerializer( 'target_date', 'link', ] - list_serializer_class = FilterableListSerializer order_detail = can_filter( ReturnOrderSerializer( @@ -2060,7 +2050,6 @@ class ReturnOrderExtraLineSerializer( """Metaclass options.""" model = order.models.ReturnOrderExtraLine - list_serializer_class = FilterableListSerializer order_detail = can_filter( ReturnOrderSerializer( diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 253441862e..5b1e3f96c6 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -92,7 +92,6 @@ class CategorySerializer( 'parent_default_location', ] read_only_fields = ['level', 'pathstring'] - list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -353,7 +352,6 @@ class PartBriefSerializer( 'pricing_max', ] read_only_fields = ['barcode_hash'] - list_serializer_class = FilterableListSerializer category_default_location = serializers.IntegerField( read_only=True, allow_null=True @@ -418,7 +416,6 @@ class PartParameterSerializer( 'updated_by_detail', ] read_only_fields = ['updated', 'updated_by'] - list_serializer_class = FilterableListSerializer def save(self): """Save the PartParameter instance.""" @@ -719,7 +716,6 @@ class PartSerializer( 'tags', ] read_only_fields = ['barcode_hash', 'creation_date', 'creation_user'] - list_serializer_class = FilterableListSerializer tags = TagListSerializerField(required=False) @@ -1674,7 +1670,6 @@ class BomItemSerializer( # Annotate the total potential quantity we can build 'can_build', ] - list_serializer_class = FilterableListSerializer quantity = InvenTree.serializers.InvenTreeDecimalField(required=True) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 41c099552d..97d48fcabd 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -34,7 +34,6 @@ from importer.registry import register_importer from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( CfListField, - FilterableListSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeModelSerializer, @@ -224,7 +223,6 @@ class StockItemTestResultSerializer( 'template_detail', ] read_only_fields = ['pk', 'user', 'date'] - list_serializer_class = FilterableListSerializer user_detail = can_filter( UserSerializer(source='user', read_only=True, allow_null=True) @@ -403,7 +401,6 @@ class StockItemSerializer( """ Fields used when creating a stock item """ - list_serializer_class = FilterableListSerializer part = serializers.PrimaryKeyRelatedField( queryset=part_models.Part.objects.all(), @@ -1160,7 +1157,6 @@ class LocationSerializer( 'tags', ] read_only_fields = ['barcode_hash', 'icon', 'level', 'pathstring'] - list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -1237,7 +1233,6 @@ class StockTrackingSerializer( 'user_detail', ] read_only_fields = ['date', 'user', 'label', 'tracking_type'] - list_serializer_class = FilterableListSerializer label = serializers.CharField(read_only=True) diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index 61158f1dea..ec40862efb 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -247,7 +247,6 @@ class GroupSerializer(PathScopedMixin, InvenTreeModelSerializer): model = Group fields = ['pk', 'name', 'permissions', 'roles', 'users'] - list_serializer_class = FilterableListSerializer permissions = can_filter( CfSerializerMethodField(allow_null=True, read_only=True),