81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
from apps.system.serializers import UserSimpleSerializer
 | 
						|
import rest_framework
 | 
						|
from rest_framework import serializers
 | 
						|
 | 
						|
from .models import State, Ticket, TicketFlow, Workflow, Transition, CustomField
 | 
						|
 | 
						|
 | 
						|
class WorkflowSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Workflow
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
class StateSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = State
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
class WorkflowSimpleSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Workflow
 | 
						|
        fields = ['id', 'name']
 | 
						|
 | 
						|
class StateSimpleSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = State
 | 
						|
        fields = ['id', 'name']
 | 
						|
 | 
						|
class TransitionSerializer(serializers.ModelSerializer):
 | 
						|
    source_state_ = StateSimpleSerializer(source='source_state', read_only=True)
 | 
						|
    destination_state_ = StateSimpleSerializer(source='destination_state', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = Transition
 | 
						|
        fields = '__all__'
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        """ Perform necessary eager loading of data. """
 | 
						|
        queryset = queryset.select_related('source_state','destination_state')
 | 
						|
        return queryset
 | 
						|
 | 
						|
 | 
						|
class CustomFieldSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = CustomField
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
class TicketSimpleSerializer(serializers.ModelSerializer):
 | 
						|
    class Meta:
 | 
						|
        model = Ticket
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
class TicketCreateSerializer(serializers.ModelSerializer):
 | 
						|
    transition = serializers.IntegerField(label='流转ID')
 | 
						|
    class Meta:
 | 
						|
        model=Ticket
 | 
						|
        fields=['title','workflow','ticket_data', 'transition']
 | 
						|
    
 | 
						|
    def create(self, validated_data):
 | 
						|
        validated_data.pop('transition')
 | 
						|
        return super().create(validated_data)
 | 
						|
 | 
						|
class TicketSerializer(serializers.ModelSerializer):
 | 
						|
    workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True)
 | 
						|
    state_ = StateSimpleSerializer(source='state', read_only=True)
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = Ticket
 | 
						|
        fields = '__all__'
 | 
						|
    
 | 
						|
    @staticmethod
 | 
						|
    def setup_eager_loading(queryset):
 | 
						|
        queryset = queryset.select_related('workflow','state')
 | 
						|
        return queryset
 | 
						|
 | 
						|
class TicketFlowSerializer(serializers.ModelSerializer):
 | 
						|
    participant_ = UserSimpleSerializer(source='participant', read_only=True)
 | 
						|
    state_ = StateSimpleSerializer(source='state', read_only=True)
 | 
						|
    class Meta:
 | 
						|
        model = TicketFlow
 | 
						|
        fields = '__all__'
 | 
						|
 | 
						|
     |