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)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

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

최근 댓글

최근 글

티스토리

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

바른 프로그래밍

Django

Django Filterset 활용하기

2023. 3. 13. 02:17

Django에서는 Search 기능이나 Filter 기능을 제공해 준다. 여기서 다양한 lookup을 사용할 수 있다. queryset과 거의 유사하게 제공해 주기 때문에 기능을 구현하는 게 직관적으로 쉬웠다. 나는 exclude를 구현하고 싶었다. 

 

코드는 다음과 같다. views.py:

from django_filters.rest_framework import DjangoFilterBackend

class FooView(viewsets.ReadOnlyModelViewSet):
    filter_backends = [..., DjangoFilterBackend, ...]
    filterset_class = PlantFilter  # legacy 에선 filter_class 로 되어있어서 간혹 stackoverflow 에서 코드를 그대로 쳤다가 적용이 안되는 경우가 있다. (내얘기다.)

PlantFilter 는 filter.py 라는 모듈을 둬서 구현했다.

filter.py:

class PlantFilter(django_filters.FilterSet):
    foo__not__in = django_filters.BaseInFilter(
        field_name="model.field_name", exclude=True
    )


    class Meta:
        model = RenewablePlantsRaw
		fields = {
        	"foo": ["exact"],
        }

그리고 아래와 같이 요청을 하면 exclude__in  과 같은 결과 값이 나온다.

/?foo__not__in=1,2,3,4,6,7
# 결과
[{
    "id": 40939,
    "bar": "5",
}, {
    "id": 72911,
    "bar": "8",
}]

'Django' 카테고리의 다른 글

django-import-export 비동기 활용하기  (0) 2023.04.13
E2E 테스트할 때 외부 API Mock으로 대체하기  (0) 2023.03.16
Django staticfile 관리하기  (0) 2023.03.01
[DRF] Serializer relations  (0) 2023.02.26
[DRF] create vs perform_create  (0) 2023.02.24
    'Django' 카테고리의 다른 글
    • django-import-export 비동기 활용하기
    • E2E 테스트할 때 외부 API Mock으로 대체하기
    • Django staticfile 관리하기
    • [DRF] Serializer relations
    r잡초처럼
    r잡초처럼
    오늘보다 내일 더 나은 개발자가 되기 위한 노력을 기록하는 블로그 입니다.

    티스토리툴바