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
반응형
'Programming-[Backend] > Django' 카테고리의 다른 글
Django로 프로젝트 세팅 with DRF, mysql, viewSet, pyTest (0) | 2024.03.07 |
---|---|
Django nested Serializer update 시 선언되지 않은 field 문제 (0) | 2024.01.03 |
API Throughput, health check fail: async 요청이 한 번에 많이 들어올 때 (0) | 2023.10.29 |
[TIL] Django Restframework Exception Handler 개요 (0) | 2023.04.16 |
[TIL] Django Cache 개요 (0) | 2023.04.16 |