diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index f7ef457..0ea78b3 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -134,7 +134,7 @@ class WMaterialListSerializer(serializers.ModelSerializer): model = WMaterial fields = '__all__' -class WProductListSerializer(serializers.ModelSerializer): +class WProductBaseSerializer(serializers.ModelSerializer): """ 半成品列表 """ @@ -146,6 +146,45 @@ class WProductListSerializer(serializers.ModelSerializer): model = WProduct fields = '__all__' +class WProductListSerializer(serializers.ModelSerializer): + """ + 半成品列表 + """ + material_ = MaterialSimpleSerializer(source='material', read_only=True) + step_ = StepSimpleSerializer(source='step', read_only=True) + subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True) + warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) + children = serializers.SerializerMethodField() + class Meta: + model = WProduct + fields = '__all__' + + def get_children(self, obj): + wps = WProduct.objects.filter(child=obj) + if wps.exists(): + return WProductBaseSerializer(instance=wps, many=True) + return [] + + +class WProductDetailSerializer(serializers.ModelSerializer): + """ + 半成品列表 + """ + material_ = MaterialSimpleSerializer(source='material', read_only=True) + step_ = StepSimpleSerializer(source='step', read_only=True) + subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True) + warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) + children = serializers.SerializerMethodField() + class Meta: + model = WProduct + fields = '__all__' + + def get_children(self, obj): + wps = WProduct.objects.filter(child=obj) + if wps.exists(): + return WProductBaseSerializer(instance=wps, many=True) + return [] + class OperationDetailSerializer(serializers.ModelSerializer): create_by_ = UserSimpleSerializer(source='create_by', read_only=True) step_ = StepSimpleSerializer(source='step', read_only=True) diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index c074d2b..499debc 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -22,7 +22,7 @@ from apps.wf.serializers import WorkflowSimpleSerializer from apps.wpm.filters import CuttingFilterSet, WMaterialFilterSet, WProductFilterSet from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem, WprouctTicket -from apps.wpm.serializers import CuttingListSerializer, OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductMtestSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer +from apps.wpm.serializers import CuttingListSerializer, OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductDetailSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductMtestSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer from rest_framework.response import Response from django.db import transaction from rest_framework import exceptions, serializers @@ -185,17 +185,23 @@ class WMaterialViewSet(CreateUpdateModelAMixin, ListModelMixin, GenericViewSet): serializer.save() return Response() -class WProductViewSet(ListModelMixin, GenericViewSet): +class WProductViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet): """ 半成品 """ perms_map={'*':'*'} - queryset = WProduct.objects.select_related('step', 'material', 'subproduction_plan', 'warehouse') + queryset = WProduct.objects.select_related('step', 'material', + 'subproduction_plan', 'warehouse').prefetch_related('child') serializer_class = WProductListSerializer filterset_class = WProductFilterSet search_fields = ['number'] ordering_fields = ['id'] ordering = ['id'] + + def get_serializer_class(self): + if self.action == 'retrieve': + return WProductDetailSerializer + return super().get_serializer_class() def get_queryset(self): queryset = self.queryset