cbma_expert/ce_server/apps/expert/serializers.py

37 lines
1.3 KiB
Python

from rest_framework.serializers import ModelSerializer
from .models import Award, Expert, Paper, Project, WorkExperience
class WorkExperienceSimpleSerializer(ModelSerializer):
class Meta:
model = WorkExperience
fields = ['id', 'name']
class ProjectSimpleSerializer(ModelSerializer):
class Meta:
model = Project
fields = ['id', 'name']
class PaperSimpleSerializer(ModelSerializer):
class Meta:
model = Paper
fields = ['id', 'name']
class AwardSimpleSerializer(ModelSerializer):
class Meta:
model = Award
fields = ['id', 'name']
class ExpertListSerializer(ModelSerializer):
workexperience_ = WorkExperienceSimpleSerializer(source='workexperience_expert', many=True, read_only=True)
project_ = ProjectSimpleSerializer(source='project_expert', many=True, read_only=True)
paper_ = PaperSimpleSerializer(source='paper_expert', many=True, read_only=True)
award_ = AwardSimpleSerializer(source='award_expert', many=True, read_only=True)
class Meta:
model = Expert
fields = '__all__'
@staticmethod
def setup_eager_loading(queryset):
""" Perform necessary eager loading of data. """
queryset = queryset.prefetch_related('workexperience_expert','project_expert', 'paper_expert', 'award_expert')
return queryset