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:
@@ -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,
|
||||
):
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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."""
|
||||
|
||||
Reference in New Issue
Block a user