From 884b10d6bcaa905f12115ca58390cf4ab13f0898 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 4 Aug 2025 11:21:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20mioitem=20=E8=BF=94=E5=9B=9E=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=97=B6=E5=B1=95=E7=A4=BA=E7=BB=84=E5=90=88=E4=BB=B6?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/inm/serializers.py | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 1d80751f..ee119d40 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -30,6 +30,15 @@ class MaterialBatchAListSerializer(CustomModelSerializer): fields = ['material', 'batch', 'rate', 'mb', 'id', 'material_'] +class MaterialBatchAListSerializer2(CustomModelSerializer): + material_name = serializers.StringRelatedField( + source='material', read_only=True) + + class Meta: + model = MIOItemA + fields = ['material', 'batch', 'rate', 'mb', + 'id', 'material_', 'material_name'] + class MaterialBatchSerializer(CustomModelSerializer): warehouse_name = serializers.CharField( source='warehouse.name', read_only=True) @@ -209,15 +218,14 @@ class MIOItemAListSerializer(CustomModelSerializer): class Meta: model = MIOItemA - fields = ['material', 'batch', 'rate', 'mioitem', - 'id', 'material_', 'material_name'] + fields = "__all__" + read_only_fields = EXCLUDE_FIELDS_BASE class MIOItemSerializer(CustomModelSerializer): warehouse_name = serializers.CharField(source='warehouse.name', read_only=True) material_ = MaterialSerializer(source='material', read_only=True) - assemb = MIOItemAListSerializer( - source='a_mioitem', read_only=True, many=True) + assemb = serializers.SerializerMethodField(label="组合件信息") material_name = serializers.StringRelatedField( source='material', read_only=True) inout_date = serializers.DateField(source='mio.inout_date', read_only=True) @@ -235,6 +243,15 @@ class MIOItemSerializer(CustomModelSerializer): ret["price"] = Decimal(ret["count"]) * Decimal(ret["unit_price"]) return ret + def get_assemb(self, obj): + qs = MIOItemA.objects.filter(mioitem=obj) + if qs.exists(): + return MIOItemAListSerializer(qs, many=True).data + elif obj.mb and obj.mb.material.is_assemb: + return MaterialBatchAListSerializer2(MaterialBatchA.objects.filter(mb=obj.mb), many=True).data + return None + + class MioItemDetailSerializer(MIOItemSerializer): mio_ = MIOListSerializer(source='mio', read_only=True)