2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-10-24 09:57:40 +00:00

fix many serializer behaviour

This commit is contained in:
Matthias Mair
2025-10-05 23:46:40 +02:00
parent 638684c724
commit 5676f7d5fc
4 changed files with 14 additions and 11 deletions

View File

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

View File

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

View File

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

View File

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