2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-10-25 02:17:37 +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, strip_html_tags,
) )
from InvenTree.schema import schema_for_view_output_options from InvenTree.schema import schema_for_view_output_options
from InvenTree.serializers import OptionalFilterabelSerializer
class CleanMixin: class CleanMixin:
@@ -204,7 +203,6 @@ class UpdateAPI(CleanMixin, generics.UpdateAPIView):
class DataImportExportSerializerMixin( class DataImportExportSerializerMixin(
OptionalFilterabelSerializer,
data_exporter.mixins.DataExportSerializerMixin, data_exporter.mixins.DataExportSerializerMixin,
importer.mixins.DataImportSerializerMixin, importer.mixins.DataImportSerializerMixin,
): ):

View File

@@ -93,12 +93,9 @@ def can_filter(func, default=False):
"""Decorator for marking serializer fields as filterable.""" """Decorator for marking serializer fields as filterable."""
# Check if function is holding OptionalFilterabelSerializer somehow # Check if function is holding OptionalFilterabelSerializer somehow
if not issubclass(func.__class__, OptionalFilterabelSerializer): if not issubclass(func.__class__, OptionalFilterabelSerializer):
return raise TypeError(
if not isinstance(func, OptionalFilterabelSerializer): 'can_filter can only be applied to OptionalFilterabelSerializer Serializers!'
return )
# raise TypeError('can_filter can only be applied to OptionalFilterabelSerializer Serializers!')
if isinstance(func, serializers.ListSerializer):
return func
func._kwargs['is_filterable'] = True func._kwargs['is_filterable'] = True
func._kwargs['is_filterable_default'] = default func._kwargs['is_filterable_default'] = default
return func return func
@@ -302,8 +299,8 @@ class DependentField(serializers.Field):
class InvenTreeModelSerializer( class InvenTreeModelSerializer(
FractionalFilterabelSerializer,
OptionalFilterabelSerializer, OptionalFilterabelSerializer,
FractionalFilterabelSerializer,
serializers.ModelSerializer, serializers.ModelSerializer,
): ):
"""Inherits the standard Django ModelSerializer class, but also ensures that the underlying model class data are checked on validation.""" """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')) raise ValidationError(_('Failed to download image from remote URL'))
return 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.mixins import DataImportExportSerializerMixin
from InvenTree.ready import isGeneratingSchema from InvenTree.ready import isGeneratingSchema
from InvenTree.serializers import ( from InvenTree.serializers import (
FilterableListSerializer,
InvenTreeDecimalField, InvenTreeDecimalField,
InvenTreeModelSerializer, InvenTreeModelSerializer,
NotesFieldMixin, NotesFieldMixin,
@@ -1189,6 +1190,7 @@ class BuildItemSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
'bom_part_id', 'bom_part_id',
'bom_part_name', 'bom_part_name',
] ]
list_serializer_class = FilterableListSerializer
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
"""Determine which extra details fields should be included.""" """Determine which extra details fields should be included."""

View File

@@ -34,7 +34,7 @@ import users.models
from importer.registry import register_importer from importer.registry import register_importer
from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.mixins import DataImportExportSerializerMixin
from InvenTree.ready import isGeneratingSchema from InvenTree.ready import isGeneratingSchema
from InvenTree.serializers import can_filter from InvenTree.serializers import FilterableListSerializer, can_filter
from users.serializers import UserSerializer from users.serializers import UserSerializer
from .models import ( from .models import (
@@ -414,8 +414,8 @@ class PartParameterSerializer(
'updated_by', 'updated_by',
'updated_by_detail', 'updated_by_detail',
] ]
read_only_fields = ['updated', 'updated_by'] read_only_fields = ['updated', 'updated_by']
list_serializer_class = FilterableListSerializer
def save(self): def save(self):
"""Save the PartParameter instance.""" """Save the PartParameter instance."""