Prefetch ( feat. to_attr)

GisangLee·2022년 9월 22일
0

django

목록 보기
21/35

1. What is to_attr

Prefetch로 실행되는 쿼리문을 list로 반환하고 캐시로 내장하는 기능


2. Difference

users = User.objects.prefetch_related(
    Prefetch(
        'profile',
        queryset=Profile.objects.all(),
        to_attr='profile_images'
    )
)

without to_attr

profile_list = [ profile.avatar for profile in users.profile.all() ] 

with to_attr

profile = [ profile.avatar for profile in users.profile_images ]

3. Why use to_attr

일반적으로 질의를 하게 됐을 경우, 접근할 때마다 질의를 수행하게 되고
그로 인해서 쿼리 양이 많아지게 된다.

  • to_attr은 쿼리 결과를 리스트로 담고 있기 때문에 추가적인 쿼리가 발생하지 않으며
  • 리스트로 반환된 질의 결과를 메모리에 올리기 때문에 바람직하다.

profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글