from rest_framework.serializers import ModelSerializer, SerializerMethodField, CharField from .models import State, Ticket, Workflow, Transition, CustomField class WorkflowSerializer(ModelSerializer): class Meta: model = Workflow fields = '__all__' class StateSerializer(ModelSerializer): class Meta: model = State fields = '__all__' class WorkflowSimpleSerializer(ModelSerializer): class Meta: model = Workflow fields = ['id', 'name'] class StateSimpleSerializer(ModelSerializer): class Meta: model = State fields = ['id', 'name'] class TransitionSerializer(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(ModelSerializer): class Meta: model = CustomField fields = '__all__' class TicketCreateSerializer(ModelSerializer): class Meta: model=Ticket fields=['title','workflow','ticket_data'] class TicketSerializer(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