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

fix list serializer

This commit is contained in:
Matthias Mair
2025-10-14 21:00:31 +02:00
parent ff307e70ee
commit f30f41ef5d
6 changed files with 32 additions and 28 deletions

View File

@@ -1354,8 +1354,8 @@ class BuildLineSerializer(
'part_detail', 'part_detail',
'build_detail', 'build_detail',
] ]
read_only_fields = ['build', 'bom_item', 'allocations'] read_only_fields = ['build', 'bom_item', 'allocations']
list_serializer_class = FilterableListSerializer
# Build info fields # Build info fields
build_reference = serializers.CharField( build_reference = serializers.CharField(

View File

@@ -19,6 +19,7 @@ from InvenTree.mixins import DataImportExportSerializerMixin
from InvenTree.ready import isGeneratingSchema from InvenTree.ready import isGeneratingSchema
from InvenTree.serializers import ( from InvenTree.serializers import (
CfCharField, CfCharField,
FilterableListSerializer,
InvenTreeCurrencySerializer, InvenTreeCurrencySerializer,
InvenTreeDecimalField, InvenTreeDecimalField,
InvenTreeImageSerializerField, InvenTreeImageSerializerField,
@@ -276,6 +277,7 @@ class ManufacturerPartSerializer(
'notes', 'notes',
'tags', 'tags',
] ]
list_serializer_class = FilterableListSerializer
tags = TagListSerializerField(required=False) tags = TagListSerializerField(required=False)
@@ -331,7 +333,10 @@ class ManufacturerPartParameterSerializer(
@register_importer() @register_importer()
class SupplierPartSerializer( class SupplierPartSerializer(
DataImportExportSerializerMixin, InvenTreeTagModelSerializer, NotesFieldMixin PathScopedMixin,
DataImportExportSerializerMixin,
InvenTreeTagModelSerializer,
NotesFieldMixin,
): ):
"""Serializer for SupplierPart object.""" """Serializer for SupplierPart object."""
@@ -377,12 +382,12 @@ class SupplierPartSerializer(
'notes', 'notes',
'tags', 'tags',
] ]
read_only_fields = [ read_only_fields = [
'availability_updated', 'availability_updated',
'barcode_hash', 'barcode_hash',
'pack_quantity_native', 'pack_quantity_native',
] ]
list_serializer_class = FilterableListSerializer
tags = TagListSerializerField(required=False) tags = TagListSerializerField(required=False)
@@ -547,6 +552,7 @@ class SupplierPriceBreakSerializer(
'supplier_detail', 'supplier_detail',
'updated', 'updated',
] ]
list_serializer_class = FilterableListSerializer
@staticmethod @staticmethod
def annotate_queryset(queryset): def annotate_queryset(queryset):

View File

@@ -45,6 +45,7 @@ from InvenTree.helpers import (
) )
from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.mixins import DataImportExportSerializerMixin
from InvenTree.serializers import ( from InvenTree.serializers import (
FilterableListSerializer,
InvenTreeCurrencySerializer, InvenTreeCurrencySerializer,
InvenTreeDecimalField, InvenTreeDecimalField,
InvenTreeModelSerializer, InvenTreeModelSerializer,
@@ -316,7 +317,6 @@ class PurchaseOrderSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.PurchaseOrder model = order.models.PurchaseOrder
fields = AbstractOrderSerializer.order_fields([ fields = AbstractOrderSerializer.order_fields([
'complete_date', 'complete_date',
'supplier', 'supplier',
@@ -327,13 +327,12 @@ class PurchaseOrderSerializer(
'order_currency', 'order_currency',
'destination', 'destination',
]) ])
read_only_fields = ['issue_date', 'complete_date', 'creation_date'] read_only_fields = ['issue_date', 'complete_date', 'creation_date']
extra_kwargs = { extra_kwargs = {
'supplier': {'required': True}, 'supplier': {'required': True},
'order_currency': {'required': False}, 'order_currency': {'required': False},
} }
list_serializer_class = FilterableListSerializer
def skip_create_fields(self): def skip_create_fields(self):
"""Skip these fields when instantiating a new object.""" """Skip these fields when instantiating a new object."""
@@ -474,7 +473,6 @@ class PurchaseOrderLineItemSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.PurchaseOrderLineItem model = order.models.PurchaseOrderLineItem
fields = [ fields = [
'pk', 'pk',
'part', 'part',
@@ -504,6 +502,7 @@ class PurchaseOrderLineItemSerializer(
'internal_part', 'internal_part',
'internal_part_name', 'internal_part_name',
] ]
list_serializer_class = FilterableListSerializer
def skip_create_fields(self): def skip_create_fields(self):
"""Return a list of fields to skip when creating a new object.""" """Return a list of fields to skip when creating a new object."""
@@ -711,6 +710,7 @@ class PurchaseOrderExtraLineSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.PurchaseOrderExtraLine model = order.models.PurchaseOrderExtraLine
list_serializer_class = FilterableListSerializer
class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer): class PurchaseOrderLineItemReceiveSerializer(serializers.Serializer):
@@ -973,7 +973,6 @@ class SalesOrderSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.SalesOrder model = order.models.SalesOrder
fields = AbstractOrderSerializer.order_fields([ fields = AbstractOrderSerializer.order_fields([
'customer', 'customer',
'customer_detail', 'customer_detail',
@@ -984,10 +983,9 @@ class SalesOrderSerializer(
'shipments_count', 'shipments_count',
'completed_shipments_count', 'completed_shipments_count',
]) ])
read_only_fields = ['status', 'creation_date', 'shipment_date'] read_only_fields = ['status', 'creation_date', 'shipment_date']
extra_kwargs = {'order_currency': {'required': False}} extra_kwargs = {'order_currency': {'required': False}}
list_serializer_class = FilterableListSerializer
def skip_create_fields(self): def skip_create_fields(self):
"""Skip these fields when instantiating a new object.""" """Skip these fields when instantiating a new object."""
@@ -1065,7 +1063,6 @@ class SalesOrderLineItemSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.SalesOrderLineItem model = order.models.SalesOrderLineItem
fields = [ fields = [
'pk', 'pk',
'allocated', 'allocated',
@@ -1089,6 +1086,7 @@ class SalesOrderLineItemSerializer(
'building', 'building',
'on_order', 'on_order',
] ]
list_serializer_class = FilterableListSerializer
@staticmethod @staticmethod
def annotate_queryset(queryset): def annotate_queryset(queryset):
@@ -1231,7 +1229,6 @@ class SalesOrderShipmentSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.SalesOrderShipment model = order.models.SalesOrderShipment
fields = [ fields = [
'pk', 'pk',
'order', 'order',
@@ -1247,6 +1244,7 @@ class SalesOrderShipmentSerializer(
'link', 'link',
'notes', 'notes',
] ]
list_serializer_class = FilterableListSerializer
@staticmethod @staticmethod
def annotate_queryset(queryset): def annotate_queryset(queryset):
@@ -1280,7 +1278,6 @@ class SalesOrderAllocationSerializer(PathScopedMixin, InvenTreeModelSerializer):
"""Metaclass options.""" """Metaclass options."""
model = order.models.SalesOrderAllocation model = order.models.SalesOrderAllocation
fields = [ fields = [
'pk', 'pk',
'item', 'item',
@@ -1300,8 +1297,8 @@ class SalesOrderAllocationSerializer(PathScopedMixin, InvenTreeModelSerializer):
'location_detail', 'location_detail',
'shipment_detail', 'shipment_detail',
] ]
read_only_fields = ['line', ''] read_only_fields = ['line', '']
list_serializer_class = FilterableListSerializer
part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True)
order = serializers.PrimaryKeyRelatedField( order = serializers.PrimaryKeyRelatedField(
@@ -1817,7 +1814,6 @@ class ReturnOrderSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.ReturnOrder model = order.models.ReturnOrder
fields = AbstractOrderSerializer.order_fields([ fields = AbstractOrderSerializer.order_fields([
'complete_date', 'complete_date',
'customer', 'customer',
@@ -1826,8 +1822,8 @@ class ReturnOrderSerializer(
'order_currency', 'order_currency',
'total_price', 'total_price',
]) ])
read_only_fields = ['creation_date'] read_only_fields = ['creation_date']
list_serializer_class = FilterableListSerializer
def skip_create_fields(self): def skip_create_fields(self):
"""Skip these fields when instantiating a new object.""" """Skip these fields when instantiating a new object."""
@@ -2008,7 +2004,6 @@ class ReturnOrderLineItemSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.ReturnOrderLineItem model = order.models.ReturnOrderLineItem
fields = [ fields = [
'pk', 'pk',
'order', 'order',
@@ -2027,6 +2022,7 @@ class ReturnOrderLineItemSerializer(
'target_date', 'target_date',
'link', 'link',
] ]
list_serializer_class = FilterableListSerializer
order_detail = can_filter( order_detail = can_filter(
ReturnOrderSerializer( ReturnOrderSerializer(
@@ -2064,6 +2060,7 @@ class ReturnOrderExtraLineSerializer(
"""Metaclass options.""" """Metaclass options."""
model = order.models.ReturnOrderExtraLine model = order.models.ReturnOrderExtraLine
list_serializer_class = FilterableListSerializer
order_detail = can_filter( order_detail = can_filter(
ReturnOrderSerializer( ReturnOrderSerializer(

View File

@@ -92,6 +92,7 @@ class CategorySerializer(
'parent_default_location', 'parent_default_location',
] ]
read_only_fields = ['level', 'pathstring'] read_only_fields = ['level', 'pathstring']
list_serializer_class = FilterableListSerializer
@staticmethod @staticmethod
def annotate_queryset(queryset): def annotate_queryset(queryset):
@@ -351,8 +352,8 @@ class PartBriefSerializer(
'pricing_min', 'pricing_min',
'pricing_max', 'pricing_max',
] ]
read_only_fields = ['barcode_hash'] read_only_fields = ['barcode_hash']
list_serializer_class = FilterableListSerializer
category_default_location = serializers.IntegerField( category_default_location = serializers.IntegerField(
read_only=True, allow_null=True read_only=True, allow_null=True
@@ -718,7 +719,7 @@ class PartSerializer(
'tags', 'tags',
] ]
read_only_fields = ['barcode_hash', 'creation_date', 'creation_user'] read_only_fields = ['barcode_hash', 'creation_date', 'creation_user']
# list_serializer_class = FilterableListSerializer list_serializer_class = FilterableListSerializer
tags = TagListSerializerField(required=False) tags = TagListSerializerField(required=False)

View File

@@ -385,11 +385,6 @@ class StockItemSerializer(
'part_detail', 'part_detail',
'location_detail', 'location_detail',
] ]
"""
These fields are read-only in this context.
They can be updated by accessing the appropriate API endpoints
"""
read_only_fields = [ read_only_fields = [
'allocated', 'allocated',
'barcode_hash', 'barcode_hash',
@@ -397,14 +392,18 @@ class StockItemSerializer(
'stocktake_user', 'stocktake_user',
'updated', 'updated',
] ]
""" """
Fields used when creating a stock item These fields are read-only in this context.
They can be updated by accessing the appropriate API endpoints
""" """
extra_kwargs = { extra_kwargs = {
'use_pack_size': {'write_only': True}, 'use_pack_size': {'write_only': True},
'serial_numbers': {'write_only': True}, 'serial_numbers': {'write_only': True},
} }
"""
Fields used when creating a stock item
"""
list_serializer_class = FilterableListSerializer
part = serializers.PrimaryKeyRelatedField( part = serializers.PrimaryKeyRelatedField(
queryset=part_models.Part.objects.all(), queryset=part_models.Part.objects.all(),
@@ -1160,8 +1159,8 @@ class LocationSerializer(
'location_type_detail', 'location_type_detail',
'tags', 'tags',
] ]
read_only_fields = ['barcode_hash', 'icon', 'level', 'pathstring'] read_only_fields = ['barcode_hash', 'icon', 'level', 'pathstring']
list_serializer_class = FilterableListSerializer
@staticmethod @staticmethod
def annotate_queryset(queryset): def annotate_queryset(queryset):
@@ -1237,8 +1236,8 @@ class StockTrackingSerializer(
'user', 'user',
'user_detail', 'user_detail',
] ]
read_only_fields = ['date', 'user', 'label', 'tracking_type'] read_only_fields = ['date', 'user', 'label', 'tracking_type']
list_serializer_class = FilterableListSerializer
label = serializers.CharField(read_only=True) label = serializers.CharField(read_only=True)

View File

@@ -247,6 +247,7 @@ class GroupSerializer(PathScopedMixin, InvenTreeModelSerializer):
model = Group model = Group
fields = ['pk', 'name', 'permissions', 'roles', 'users'] fields = ['pk', 'name', 'permissions', 'roles', 'users']
list_serializer_class = FilterableListSerializer
permissions = can_filter( permissions = can_filter(
CfSerializerMethodField(allow_null=True, read_only=True), CfSerializerMethodField(allow_null=True, read_only=True),