Django restframework SerializerMethodField background work

I am writing a project in Django with rest framework by using SerializerMethodField. This method makes queries for every row to get data, or View collects all queries and send it to DB? Django can make it as one joint query?


class SubjectSerializer(serializers.ModelSerializer):

    edu_plan = serializers.SerializerMethodField(read_only=True)
    academic_year_semestr = serializers.SerializerMethodField(read_only=True)
    edu_form = serializers.SerializerMethodField(read_only=True)
    
    def get_edu_plan(self, cse):
        return cse.curriculum_subject.curriculum.edu_plan.name
    
    def get_academic_year_semestr(self, cse):
        semester = cse.curriculum_subject.curriculum.semester
        return {'academic_year': semester.academic_year, 'semester': semester}
    
    def get_edu_form(self, cse):
        return cse.curriculum_subject.curriculum.edu_form.name

    class Meta:
        model = CurriculumSubjectEmployee
        fields = [
            'id',
            'name',
            'edu_plan',
            'academic_year_semestr',
            'edu_form'
        ]

class SubjectViewSet(viewsets.ReadOnlyModelViewSet):

    serializer_class = SubjectSerializer

    def get_queryset(self):
        contract = self.request.user.employee.contract
        
        if contract is None:
            raise NotFound(detail="Contract not found", code=404)

        department = contract.department
        
        cses = CurriculumSubjectEmployee\
            .objects\
            .filter(curriculum_subject__department=department)


        return cses

Back to Top