1
0
forked from erp-dev/erp

feat: added StockChangeDetailShortcutSerializer

This commit is contained in:
2026-02-02 16:19:19 +08:00
parent e1f0f8420b
commit 59c78b7c64

View File

@@ -10,10 +10,12 @@ from api_v1.views.stock_change_views.mixins import StockChangeViewMixin
from business import models as business_models
from business import pre_order_services
from business import allocation_services
from stock import models as stock_models
class AllocationRecordSerializer(serializers.ModelSerializer):
stock_ids = serializers.SerializerMethodField(read_only=True)
stock_details = serializers.SerializerMethodField(read_only=True)
scanned_by_name = serializers.CharField(source='scanned_by.name', read_only=True)
class Meta:
@@ -22,6 +24,7 @@ class AllocationRecordSerializer(serializers.ModelSerializer):
'id',
'pre_sales_order_item',
'stock_ids',
'stock_details',
'quantity',
'unit',
'status',
@@ -43,6 +46,33 @@ class AllocationRecordSerializer(serializers.ModelSerializer):
def get_stock_ids(self, obj: business_models.AllocationRecord):
return obj.stock_id_list
def get_stock_details(self, obj: business_models.AllocationRecord):
stock_ids = obj.stock_id_list
if not stock_ids:
return []
details_by_id = stock_models.StockChangeDetail.objects.select_related(
'product'
).in_bulk(stock_ids)
return [
StockChangeDetailShortcutSerializer(details_by_id[stock_id]).data
for stock_id in stock_ids
if stock_id in details_by_id
]
class StockChangeDetailShortcutSerializer(serializers.ModelSerializer):
product_id = serializers.IntegerField(source='product_id', read_only=True)
product_name = serializers.CharField(source='product.name', read_only=True)
class Meta:
model = stock_models.StockChangeDetail
fields = [
'product_id',
'product_name',
'quantity',
]
read_only_fields = fields
class PreSalesOrderItemSerializer(serializers.ModelSerializer):
allocated_quantity = serializers.SerializerMethodField(read_only=True)