본문 바로가기
관리자

Programming-[Backend]/Django

reverse relationship: _set 호출 시 get_ 메서드에서 N+1 발생

728x90
반응형

 

문제

reverse relationship을 가진 속성값을 _set을 통해서 호출할 때, get_ 메서드에서 N+1 문제가 발생했다.

 

해결

예를 들면 아래 예시 코드에서, student_set을 통해 Related Manager로 set을 불러올 때 .all()을 사용하면 안되고 .first()등으로 특정 로우를 한정해야한다. 그렇지 않으면 여러 개의 School -> 여러 개의 Student가 호출되면서 N+1 문제가 필연적으로 발생한다.

class SchoolListSerializer(serializers.ModelSerializer):
	latest_student_name = serializers.SerializerMethodField()
    
    def get_latest_student_name(self, obj: School) -> str:
	    return obj.student_set.first().name if obj.student.first() else ""

 

728x90
반응형