r잡초처럼
바른 프로그래밍
r잡초처럼
전체 방문자
오늘
어제
  • 분류 전체보기 (124)
    • FastAPI (7)
    • 끄적끄적 (2)
    • Python (17)
    • Django (31)
    • Database (2)
    • Docker (7)
    • 디자인패턴 (2)
    • CS 공부 (12)
      • 알고리즘 (2)
      • 자료 구조 (1)
      • 네트워크 (7)
      • IT 지식 (1)
      • 운영체제 (1)
    • 기타 팁들 (10)
    • Aws (2)
    • 독서 (1)
    • 코딩테스트 공부 (1)
      • 백준 (0)
      • 프로그래머스 (1)
    • DevOps (13)
    • TIL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 상속과 컴포지션
  • 랜과 왠
  • 5장 회사에서 하는 랜 구성
  • encoding
  • preonboarding
  • 물리 계층
  • 완벽한 IT 인프라 구축을 위한 Docker
  • poetry
  • validate
  • 랜 카드
  • pytest
  • cp949
  • 책 리뷰
  • 전기 신호
  • 7장
  • Batch
  • 모두의 네트워크
  • 파이썬 클린 코드
  • 케이블의 종류
  • depends
  • 네트워크
  • CS 지식
  • query param
  • dotenv
  • fastapi
  • docker
  • 컴퓨터 기본 지식
  • 6장
  • 상속 안티 패턴
  • pycharm

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
r잡초처럼

바른 프로그래밍

Django

DRF - Null인 경우 마지막에 배치하도록 하기

2023. 4. 17. 22:20

drf에서 제공하는 Ordering Filter 기능을 커스텀했다. 공식 문서는 요기

 

문제 상황

ordering 을 하는 과정에서 null 값이 존재하는 경우 정렬 순서를 맨 끝으로 보내야 했다. 따라서 OrderingFilter 의 filter_queryset을 override 하기로 했다.

 

param은 "-" 의 경우 내림 차순이므로 맨 앞글자를 검사해서 "-" 있을 경우 내림 차순 표현식으로 만들고 아닌 경우 오름차순으로 만들었다. 밑에는 해당 코드이다.

class FooOrdering(OrderingFilter):
    @staticmethod
    def nullish_ordering(field: str) -> F:
    	"""
        ordering 에서 오름차순 혹은 내림차순으로 변경하고 이때 null이 맨 마지막으로 오도록 하는 함수
        """
        if "-" == field[0]:
            return F(field[1:]).desc(nulls_last=True)
        return F(field).asc(nulls_last=True)

    def filter_queryset(self, request, queryset, view):
        ordering = self.get_ordering(request, queryset, view)

        if ordering:
            ordering = [self.nullish_ordering(x) for x in ordering]
            return queryset.order_by(*ordering)

        return queryset

'Django' 카테고리의 다른 글

Django Channels - Consumer 살펴보기  (0) 2023.05.05
WebSocket 살펴보기 - 2  (0) 2023.05.05
django-import-export 비동기 활용하기  (0) 2023.04.13
E2E 테스트할 때 외부 API Mock으로 대체하기  (0) 2023.03.16
Django Filterset 활용하기  (0) 2023.03.13
    'Django' 카테고리의 다른 글
    • Django Channels - Consumer 살펴보기
    • WebSocket 살펴보기 - 2
    • django-import-export 비동기 활용하기
    • E2E 테스트할 때 외부 API Mock으로 대체하기
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바