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