본문 바로가기

Django/DRF

[DRF] queryset과 get_queryset()의 차이점

 

본인은 DRF 라이브러리에서 viewsets과 mixin 기능을 사용해서 API 개발을 자주한다.
클래스형 view를 개발하다보면, 
def get_queryset(self):​
이라는 함수를 클래스 내에 내장하는 경우가 있는데 

class API(mixin.어쩌고,
		  viewsets.어쩌고):
queryset = 어쩌고
.
.
.​
위의 코드 처럼 queryset을 기본적으로 사용할 것이다.

그러면 get_queryset 함수는 왜 사용해야할까?

 

 

queryset VS get_queryset()

분명 queryset과 get_queryset()은 같은 동작을 한다.
하지만, 필터의 값이 동적일 경우 잘못된 쿼리가 나올 수 있다.

# 필터의 값이 동적일 경우 잘못된 쿼리가 나올 수 있음
# (X)
class ListView(ListAPIView):
    queryset = order.objects.filter(created_date=date.today())  # 앱이 시작될 때 date.today() 실행 됨

# (O)
class ListView(ListAPIView):
    def get_queryset(self):
        return order.objects.filter(created_date=date.today())  # request 마다 date.today() 실행 됨​
queryset : request 시 한 번만 실행됨.
get_queryset() : request 마다 실행됨.

 

'Django > DRF' 카테고리의 다른 글

[Django] DecimalField  (0) 2022.05.25
[Django rest Framework] get_object()  (0) 2022.04.23
[Django rest Framework] Swagger 문서 자동화 ( drf-yasg )  (0) 2022.04.22
[Django rest framework] TDD - Unit Test  (0) 2022.04.20
[Django] ContentType  (0) 2022.03.29