diff --git a/src/backend/InvenTree/InvenTree/mixins.py b/src/backend/InvenTree/InvenTree/mixins.py index 99b5ae2f81..d5512cabc0 100644 --- a/src/backend/InvenTree/InvenTree/mixins.py +++ b/src/backend/InvenTree/InvenTree/mixins.py @@ -14,7 +14,6 @@ from InvenTree.helpers import ( strip_html_tags, ) from InvenTree.schema import schema_for_view_output_options -from InvenTree.serializers import OptionalFilterabelSerializer class CleanMixin: @@ -204,7 +203,6 @@ class UpdateAPI(CleanMixin, generics.UpdateAPIView): class DataImportExportSerializerMixin( - OptionalFilterabelSerializer, data_exporter.mixins.DataExportSerializerMixin, importer.mixins.DataImportSerializerMixin, ): diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 647edcbf98..d4580e5433 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -93,12 +93,9 @@ def can_filter(func, default=False): """Decorator for marking serializer fields as filterable.""" # Check if function is holding OptionalFilterabelSerializer somehow if not issubclass(func.__class__, OptionalFilterabelSerializer): - return - if not isinstance(func, OptionalFilterabelSerializer): - return - # raise TypeError('can_filter can only be applied to OptionalFilterabelSerializer Serializers!') - if isinstance(func, serializers.ListSerializer): - return func + raise TypeError( + 'can_filter can only be applied to OptionalFilterabelSerializer Serializers!' + ) func._kwargs['is_filterable'] = True func._kwargs['is_filterable_default'] = default return func @@ -302,8 +299,8 @@ class DependentField(serializers.Field): class InvenTreeModelSerializer( - FractionalFilterabelSerializer, OptionalFilterabelSerializer, + FractionalFilterabelSerializer, serializers.ModelSerializer, ): """Inherits the standard Django ModelSerializer class, but also ensures that the underlying model class data are checked on validation.""" @@ -611,3 +608,9 @@ class RemoteImageMixin(metaclass=serializers.SerializerMetaclass): raise ValidationError(_('Failed to download image from remote URL')) return url + + +class FilterableListSerializer( + OptionalFilterabelSerializer, serializers.ListSerializer +): + """Custom ListSerializer which allows filtering of fields.""" diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 4b4e3d23a8..52be23c472 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -35,6 +35,7 @@ from generic.states.fields import InvenTreeCustomStatusSerializerMixin from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.ready import isGeneratingSchema from InvenTree.serializers import ( + FilterableListSerializer, InvenTreeDecimalField, InvenTreeModelSerializer, NotesFieldMixin, @@ -1189,6 +1190,7 @@ class BuildItemSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali 'bom_part_id', 'bom_part_name', ] + list_serializer_class = FilterableListSerializer def __init__(self, *args, **kwargs): """Determine which extra details fields should be included.""" diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index aef0e8f807..4ae5c84a2e 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -34,7 +34,7 @@ import users.models from importer.registry import register_importer from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.ready import isGeneratingSchema -from InvenTree.serializers import can_filter +from InvenTree.serializers import FilterableListSerializer, can_filter from users.serializers import UserSerializer from .models import ( @@ -414,8 +414,8 @@ class PartParameterSerializer( 'updated_by', 'updated_by_detail', ] - read_only_fields = ['updated', 'updated_by'] + list_serializer_class = FilterableListSerializer def save(self): """Save the PartParameter instance."""