get_queryset in drf

drf의 modelviset에는 get_queryset이라는 메서드가 있다. api에 필요한 쿼리셋을 반환해주는 메서드이다. 해당 메서드가 원래 어떻게 정의되어있는지 보자:

 """
        Get the list of items for this view.
        This must be an iterable, and may be a queryset.
        Defaults to using `self.queryset`.

        This method should always be used rather than accessing `self.queryset`
        directly, as `self.queryset` gets evaluated only once, and those results
        are cached for all subsequent requests.

        You may want to override this if you need to provide different
        querysets depending on the incoming request.

        (Eg. return a list of items that is specific to the user)
        """
        assert self.queryset is not None, (
            "'%s' should either include a `queryset` attribute, "
            "or override the `get_queryset()` method."
            % self.__class__.__name__
        )

        queryset = self.queryset
        if isinstance(queryset, QuerySet):
            # Ensure queryset is re-evaluated on each request.
            queryset = queryset.all()
        return queryset

'Get the list of items for this view'가 중요한 파트다. 처음에 이 메서드를 오바리이딩할 때 모델에서 필요한 데이터를 get으로 가져오니 detail: "not found"가 떴다. 생각해보니 쿼리셋은 하나의 오브젝트가 아니라 오브젝트의 리스트를 일컫는 것이기 때문에 filter로 바꿔서 하니 성공.

좋은 웹페이지 즐겨찾기