diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 3973546bf3..0db842f51c 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -1354,8 +1354,8 @@ class BuildLineSerializer( 'part_detail', '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 9515cf44b6..8666712d4b 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -19,6 +19,7 @@ from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.ready import isGeneratingSchema from InvenTree.serializers import ( CfCharField, + FilterableListSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeImageSerializerField, @@ -276,6 +277,7 @@ class ManufacturerPartSerializer( 'notes', 'tags', ] + list_serializer_class = FilterableListSerializer tags = TagListSerializerField(required=False) @@ -331,7 +333,10 @@ class ManufacturerPartParameterSerializer( @register_importer() class SupplierPartSerializer( - DataImportExportSerializerMixin, InvenTreeTagModelSerializer, NotesFieldMixin + PathScopedMixin, + DataImportExportSerializerMixin, + InvenTreeTagModelSerializer, + NotesFieldMixin, ): """Serializer for SupplierPart object.""" @@ -377,12 +382,12 @@ class SupplierPartSerializer( 'notes', 'tags', ] - read_only_fields = [ 'availability_updated', 'barcode_hash', 'pack_quantity_native', ] + list_serializer_class = FilterableListSerializer tags = TagListSerializerField(required=False) @@ -547,6 +552,7 @@ 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 17faa1a807..51dfa36ecd 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -45,6 +45,7 @@ from InvenTree.helpers import ( ) from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( + FilterableListSerializer, InvenTreeCurrencySerializer, InvenTreeDecimalField, InvenTreeModelSerializer, @@ -316,7 +317,6 @@ class PurchaseOrderSerializer( """Metaclass options.""" model = order.models.PurchaseOrder - fields = AbstractOrderSerializer.order_fields([ 'complete_date', 'supplier', @@ -327,13 +327,12 @@ class PurchaseOrderSerializer( 'order_currency', 'destination', ]) - read_only_fields = ['issue_date', 'complete_date', 'creation_date'] - extra_kwargs = { 'supplier': {'required': True}, 'order_currency': {'required': False}, } + list_serializer_class = FilterableListSerializer def skip_create_fields(self): """Skip these fields when instantiating a new object.""" @@ -474,7 +473,6 @@ class PurchaseOrderLineItemSerializer( """Metaclass options.""" model = order.models.PurchaseOrderLineItem - fields = [ 'pk', 'part', @@ -504,6 +502,7 @@ 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.""" @@ -711,6 +710,7 @@ class PurchaseOrderExtraLineSerializer( """Metaclass options.""" model = order.models.PurchaseOrderExtraLine + list_serializer_class = FilterableListSerializer class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): @@ -973,7 +973,6 @@ class SalesOrderSerializer( """Metaclass options.""" model = order.models.SalesOrder - fields = AbstractOrderSerializer.order_fields([ 'customer', 'customer_detail', @@ -984,10 +983,9 @@ class SalesOrderSerializer( 'shipments_count', 'completed_shipments_count', ]) - 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.""" @@ -1065,7 +1063,6 @@ class SalesOrderLineItemSerializer( """Metaclass options.""" model = order.models.SalesOrderLineItem - fields = [ 'pk', 'allocated', @@ -1089,6 +1086,7 @@ class SalesOrderLineItemSerializer( 'building', 'on_order', ] + list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -1231,7 +1229,6 @@ class SalesOrderShipmentSerializer( """Metaclass options.""" model = order.models.SalesOrderShipment - fields = [ 'pk', 'order', @@ -1247,6 +1244,7 @@ class SalesOrderShipmentSerializer( 'link', 'notes', ] + list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -1280,7 +1278,6 @@ class SalesOrderAllocationSerializer(PathScopedMixin, InvenTreeModelSerializer): """Metaclass options.""" model = order.models.SalesOrderAllocation - fields = [ 'pk', 'item', @@ -1300,8 +1297,8 @@ class SalesOrderAllocationSerializer(PathScopedMixin, InvenTreeModelSerializer): 'location_detail', 'shipment_detail', ] - read_only_fields = ['line', ''] + list_serializer_class = FilterableListSerializer part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) order = serializers.PrimaryKeyRelatedField( @@ -1817,7 +1814,6 @@ class ReturnOrderSerializer( """Metaclass options.""" model = order.models.ReturnOrder - fields = AbstractOrderSerializer.order_fields([ 'complete_date', 'customer', @@ -1826,8 +1822,8 @@ class ReturnOrderSerializer( 'order_currency', 'total_price', ]) - read_only_fields = ['creation_date'] + list_serializer_class = FilterableListSerializer def skip_create_fields(self): """Skip these fields when instantiating a new object.""" @@ -2008,7 +2004,6 @@ class ReturnOrderLineItemSerializer( """Metaclass options.""" model = order.models.ReturnOrderLineItem - fields = [ 'pk', 'order', @@ -2027,6 +2022,7 @@ class ReturnOrderLineItemSerializer( 'target_date', 'link', ] + list_serializer_class = FilterableListSerializer order_detail = can_filter( ReturnOrderSerializer( @@ -2064,6 +2060,7 @@ 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 957eb5220f..253441862e 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -92,6 +92,7 @@ class CategorySerializer( 'parent_default_location', ] read_only_fields = ['level', 'pathstring'] + list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -351,8 +352,8 @@ class PartBriefSerializer( 'pricing_min', 'pricing_max', ] - read_only_fields = ['barcode_hash'] + list_serializer_class = FilterableListSerializer category_default_location = serializers.IntegerField( read_only=True, allow_null=True @@ -718,7 +719,7 @@ class PartSerializer( 'tags', ] read_only_fields = ['barcode_hash', 'creation_date', 'creation_user'] - # list_serializer_class = FilterableListSerializer + list_serializer_class = FilterableListSerializer tags = TagListSerializerField(required=False) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 8fa40ac51f..41c099552d 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -385,11 +385,6 @@ class StockItemSerializer( 'part_detail', 'location_detail', ] - - """ - These fields are read-only in this context. - They can be updated by accessing the appropriate API endpoints - """ read_only_fields = [ 'allocated', 'barcode_hash', @@ -397,14 +392,18 @@ class StockItemSerializer( 'stocktake_user', 'updated', ] - """ - Fields used when creating a stock item + These fields are read-only in this context. + They can be updated by accessing the appropriate API endpoints """ extra_kwargs = { 'use_pack_size': {'write_only': True}, 'serial_numbers': {'write_only': True}, } + """ + Fields used when creating a stock item + """ + list_serializer_class = FilterableListSerializer part = serializers.PrimaryKeyRelatedField( queryset=part_models.Part.objects.all(), @@ -1160,8 +1159,8 @@ class LocationSerializer( 'location_type_detail', 'tags', ] - read_only_fields = ['barcode_hash', 'icon', 'level', 'pathstring'] + list_serializer_class = FilterableListSerializer @staticmethod def annotate_queryset(queryset): @@ -1237,8 +1236,8 @@ class StockTrackingSerializer( 'user', '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 ec40862efb..61158f1dea 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -247,6 +247,7 @@ 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),