[Django] SerializerMethodField
2023. 6. 19. 16:12ㆍPython/Django
글 내용
SerializerMethodField 사용 시 N+1 문제가 발생할 수 있는 상황에 대한 정리
SerializerMethodField의 장점
- 모델에 없는 데이터 정의 후 사용
- 유연성 및 데이터 정의
- 동적으로 필드 구현
- 등등
위와 같은 장점이 있지만 주의점이 존재
N+1 상황
- 아래와 같은 방식으로 작성 시에 team에 대해서 Prefetch가 되어 있어도 N+1문제가 발생
Prefetch
User.objects.prefetch_related(
Prefetch(
'consultings'
queryset=Consulting.objects.filter(status=1)
)
)
Serializer
class UseSerializer(ModelSerializer):
consulting_list = SerializerMethodField()
def get_consultings(self, obj):
consulting_list = obj.consultings.valeus('reserved_date')
return consulting_list
해결 방법
- attr_to를 통해 list로 prefetch 후 작업
Prefetch
User.objects.prefetch_related(
Prefetch(
'consultings'
queryset=Consulting.objects.filter(status=1)
to_attr='attr_consultings'
)
)
Serializer
class UseSerializer(ModelSerializer):
consulting_list = SerializerMethodField()
def get_consultings(self, obj):
return obj.attr_consultings
'Python > Django' 카테고리의 다른 글
[Django] 특정 리스트에 순서에 맞게 order_by(id 순서대로 정렬) (0) | 2023.10.10 |
---|---|
Versioning decorator (0) | 2023.08.21 |
Django PhoneNumberField, phonenumbers (0) | 2023.04.26 |
Django Custom Header 처리 (0) | 2023.03.08 |
Django group by 이슈 (0) | 2023.02.11 |