[DRF] list override 할때 filter, pagenation 적용하기

JinUk Lee·2023년 11월 3일
0

DRF 학습하기

목록 보기
40/57

class RecordView(ModelViewSet):
    pagination_class = RecordPage
    serializer_class = RecordSerializer
    queryset = Record.objects.all()
    
    def list():
    
    	return Response()

이러한 ModelViewSet에서 list를 오버라이드했는데 그 전에는 잘 적용되던 페이지네이션과 필터링이 깨졌다.

정확한 원인은 찾지 못했지만 아래의 답변을 보면 상속 과정으로 인해 발생하는 문제라고 추측된다.

https://stackoverflow.com/questions/42800057/django-rest-framework-viewset-doesnt-obey-pagination-class

해결법은 오버라이드한 함수에서 다시 페이지네이션과 필터링을 적용시켜주면 된다.

class RecordView(ModelViewSet):
    pagination_class = RecordPage
    serializer_class = RecordSerializer
    queryset = Record.objects.all()
    
    def list():
    	qs = Record.object.all()
        qs = self.filter_queryset(qs)

        page = self.paginate_queryset(qs)
        if page is not None:
            serializer = RecordSerializer(page,many=True)
            return self.get_paginated_response(serializer.data)
        serializer =  RecordSerializer(qs,many=True)
        return Response(serializer.data)
profile
개발자 지망생

0개의 댓글