From 9388eada7d4e9abb3975180296bb2a1f9b772d2b Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 3 Dec 2025 11:11:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20base=20=E5=A2=9E=E5=8A=A0statedetailser?= =?UTF-8?q?ializer=E5=8F=AF=E8=BF=94=E5=9B=9E=E8=8A=82=E7=82=B9=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E4=BA=BA=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wf/serializers.py | 18 ++++++++++++++++-- apps/wf/views.py | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/apps/wf/serializers.py b/apps/wf/serializers.py index e9242079..4897de35 100755 --- a/apps/wf/serializers.py +++ b/apps/wf/serializers.py @@ -1,5 +1,5 @@ -from apps.system.models import Dept, User -from apps.system.serializers import UserSignatureSerializer, UserSimpleSerializer +from apps.system.models import Dept, User, Post, Role +from apps.system.serializers import UserSignatureSerializer, UserSimpleSerializer, DeptSimpleSerializer, PostSimpleSerializer, RoleSimpleSerializer from rest_framework import serializers from apps.utils.serializers import CustomModelSerializer @@ -23,6 +23,20 @@ class StateSerializer(CustomModelSerializer): model = State fields = '__all__' +class StateDetailSerializer(StateSerializer): + participant_ = serializers.SerializerMethodField() + + def get_participant_(self, obj:State): + if obj.participant_type == State.PARTICIPANT_TYPE_PERSONAL: + return UserSimpleSerializer(instance=User.objects.get(id=obj.participant)).data + elif obj.participant_type == State.PARTICIPANT_TYPE_MULTI: + return UserSimpleSerializer(instance=User.objects.filter(id__in=obj.participant), many=True).data + elif obj.participant_type == State.PARTICIPANT_TYPE_DEPT: + return DeptSimpleSerializer(instance=Dept.objects.filter(id__in=obj.participant), many=True).data + elif obj.participant_type == State.PARTICIPANT_TYPE_POST: + return PostSimpleSerializer(instance=Post.objects.filter(id__in=obj.participant), many=True).data + elif obj.participant_type == State.PARTICIPANT_TYPE_ROLE: + return RoleSimpleSerializer(instance=Role.objects.filter(id__in=obj.participant), many=True).data class WorkflowSimpleSerializer(CustomModelSerializer): class Meta: diff --git a/apps/wf/views.py b/apps/wf/views.py index 467943a3..513471f4 100755 --- a/apps/wf/views.py +++ b/apps/wf/views.py @@ -8,7 +8,7 @@ from rest_framework.response import Response from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, \ RetrieveModelMixin, UpdateModelMixin from apps.wf.serializers import CustomFieldCreateUpdateSerializer, CustomFieldSerializer, StateSerializer, \ - TicketAddNodeEndSerializer, TicketAddNodeSerializer, TicketCloseSerializer, \ + StateDetailSerializer, TicketAddNodeEndSerializer, TicketAddNodeSerializer, TicketCloseSerializer, \ TicketCreateSerializer, TicketDeliverSerializer, TicketDestorySerializer, TicketFlowSerializer, \ TicketHandleSerializer, TicketRetreatSerializer, \ TicketSerializer, TransitionSerializer, WorkflowSerializer, \ @@ -185,6 +185,7 @@ class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, Destr 'put': 'workflow.update', 'delete': 'workflow.update'} queryset = State.objects.all() serializer_class = StateSerializer + retrieve_serializer_class = StateDetailSerializer search_fields = ['name'] filterset_fields = ['workflow'] ordering = ['sort']