工作流查询优化

This commit is contained in:
caoqianming 2023-02-20 09:07:03 +08:00
parent 6c04d161f8
commit ab880ae8ad
1 changed files with 10 additions and 3 deletions

View File

@ -189,6 +189,7 @@ class TransitionViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin,
'put': 'workflow.update', 'delete': 'workflow.update'} 'put': 'workflow.update', 'delete': 'workflow.update'}
queryset = Transition.objects.all() queryset = Transition.objects.all()
serializer_class = TransitionSerializer serializer_class = TransitionSerializer
select_related_fields = ['source_state', 'destination_state']
search_fields = ['name'] search_fields = ['name']
filterset_fields = ['workflow'] filterset_fields = ['workflow']
ordering = ['id'] ordering = ['id']
@ -214,6 +215,7 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
queryset = Ticket.objects.all() queryset = Ticket.objects.all()
serializer_class = TicketSerializer serializer_class = TicketSerializer
search_fields = ['title'] search_fields = ['title']
select_related_fields = ['workflow', 'state']
filterset_class = TicketFilterSet filterset_class = TicketFilterSet
ordering = ['-create_time'] ordering = ['-create_time']
@ -341,7 +343,11 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
""" """
ticket = self.get_object() ticket = self.get_object()
steps = WfService.get_ticket_steps(ticket) steps = WfService.get_ticket_steps(ticket)
return Response(StateSerializer(instance=steps, many=True).data) data = StateSerializer(instance=steps, many=True).data
for i in data:
if i['id'] == ticket.state.id:
i['checked'] = True
return Response(data)
@action(methods=['get'], detail=True, perms_map={'get': '*'}) @action(methods=['get'], detail=True, perms_map={'get': '*'})
def flowlogs(self, request, pk=None): def flowlogs(self, request, pk=None):
@ -350,7 +356,7 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
""" """
ticket = self.get_object() ticket = self.get_object()
flowlogs = TicketFlow.objects.filter(ticket=ticket).order_by('-create_time') flowlogs = TicketFlow.objects.filter(ticket=ticket).order_by('-create_time')
serializer = TicketFlowSerializer(instance=flowlogs, many=True) serializer = TicketFlowSerializer(instance=flowlogs.select_related('participant', 'state', 'transition'), many=True)
return Response(serializer.data) return Response(serializer.data)
@action(methods=['get'], detail=True, perms_map={'get': '*'}) @action(methods=['get'], detail=True, perms_map={'get': '*'})
@ -360,7 +366,7 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R
""" """
ticket = self.get_object() ticket = self.get_object()
transitions = WfService.get_ticket_transitions(ticket) transitions = WfService.get_ticket_transitions(ticket)
return Response(TransitionSerializer(instance=transitions, many=True).data) return Response(TransitionSerializer(instance=transitions.select_related('source_state', 'destination_state'), many=True).data)
@action(methods=['post'], detail=True, perms_map={'post': '*'}) @action(methods=['post'], detail=True, perms_map={'post': '*'})
def accpet(self, request, pk=None): def accpet(self, request, pk=None):
@ -521,5 +527,6 @@ class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, CustomGenericViewSet
queryset = TicketFlow.objects.all() queryset = TicketFlow.objects.all()
serializer_class = TicketFlowSerializer serializer_class = TicketFlowSerializer
search_fields = ['suggestion'] search_fields = ['suggestion']
select_related_fields = ['participant', 'state', 'transition']
filterset_fields = ['ticket'] filterset_fields = ['ticket']
ordering = ['-create_time'] ordering = ['-create_time']