diff --git a/apps/mtm/serializers.py b/apps/mtm/serializers.py index 12acc89c..0eabfd65 100644 --- a/apps/mtm/serializers.py +++ b/apps/mtm/serializers.py @@ -163,7 +163,7 @@ class RouteSerializer(CustomModelSerializer): source='material_out.type', read_only=True) material_out_is_hidden = serializers.BooleanField( source='material_out.is_hidden', read_only=True) - material_out_tracking = serializers.IntegerField(source='material_out.tracking', required=False) + material_out_tracking = serializers.IntegerField(write_only=True, required=False, allow_null=True) class Meta: model = Route @@ -232,6 +232,7 @@ class RouteSerializer(CustomModelSerializer): def create(self, validated_data): process = validated_data['process'] routepack = validated_data.get('routepack', None) + material_out_tracking = validated_data.pop("material_out_tracking", Material.MA_TRACKING_BATCH) if routepack: pass # if Route.objects.filter(routepack=routepack, process=process).exists(): @@ -247,6 +248,8 @@ class RouteSerializer(CustomModelSerializer): if material_out: if material_out.process is None: material_out.process = process + if material_out_tracking != material_out.tracking: + raise ParseError("物料跟踪类型不一致!请前往物料处修改") if instance.material: material_out.parent = instance.material material_out.save() @@ -254,12 +257,13 @@ class RouteSerializer(CustomModelSerializer): # raise ParseError('物料工序错误!请重新选择') else: if instance.material: - self.gen_material_out(instance, validated_data.get("material_out_tracking", Material.MA_TRACKING_BATCH)) + self.gen_material_out(instance, material_out_tracking) return instance def update(self, instance, validated_data): validated_data.pop('material', None) process = validated_data.pop('process', None) + material_out_tracking = validated_data.pop("material_out_tracking", Material.MA_TRACKING_BATCH) with transaction.atomic(): instance = super().update(instance, validated_data) material_out = instance.material_out @@ -273,10 +277,17 @@ class RouteSerializer(CustomModelSerializer): # raise ParseError('物料工序错误!请重新选择') else: if instance.material: - self.gen_material_out(instance, validated_data.get("material_out_tracking", Material.MA_TRACKING_BATCH)) + self.gen_material_out(instance, material_out_tracking) return instance - + def to_representation(self, instance): + res = super().to_representation(instance) + if instance.material_out: + res['material_out_tracking'] = instance.material_out.tracking + else: + res['material_out_tracking'] = None + return res + class SruleSerializer(CustomModelSerializer): belong_dept_name = serializers.CharField(source='belong_dept.name', read_only=True) class Meta: