Views & Viewsets 주요 함수 및 활용

DRF ViewSet에서 자주 사용되는 핵심 함수들과 실무 활용법

@action 데코레이터

기본 CRUD 외 커스텀 엔드포인트 추가

  • detail=True/False: 개별 객체/전체 목록 대상 액션 설정

  • methods: 허용할 HTTP 메서드 지정

@action(detail=True, methods=['post'])
def publish_post(self, request, pk=None):
    post = self.get_object()
    post.is_published = True
    post.save()
    return Response(PostSerializer(post).data)

get_serializer_class

요청 종류(action)에 따라 다른 Serializer 동적 반환

def get_serializer_class(self):
    if self.action == 'list':
        return PostSimpleSerializer
    elif self.action == 'create':
        return PostCreateSerializer
    return PostDetailSerializer

get_queryset

동적으로 QuerySet 필터링 및 조작

get_object

특정 객체 조회 로직 커스터마이징

perform_create / perform_update / perform_destroy

객체 생성/수정/삭제 시 추가 로직 실행

get_permissions

HTTP 메서드나 action별로 다른 권한 클래스 적용

lookup_field

pk 대신 slug, uuid 등 다른 필드로 객체 조회

get_serializer_context

Serializer에 추가 컨텍스트 데이터 전달

filter_queryset

필터링, 검색, 정렬 로직 적용

paginate_queryset

커스텀 페이지네이션 로직

Last updated