SimpleListFilter - 어드민 패널에서 커스텀 필터링하기

김혁준·2023년 5월 2일
0

django

목록 보기
6/18
from datetime import date
from django.contrib import admin
from django.utils.translation import gettext_lazy as _

class DecadeBornListFilter(admin.SimpleListFilter):

    title = _("decade born")

    def lookups(self, request, model_admin):
   
        return [
            ("80s", _("in the eighties")),
            ("90s", _("in the nineties")),
        ]

    def queryset(self, request, queryset):
  
        if self.value() == "80s":
            return queryset.filter(
                birthday__gte=date(1980, 1, 1),
                birthday__lte=date(1989, 12, 31),
            )
        if self.value() == "90s":
            return queryset.filter(
                birthday__gte=date(1990, 1, 1),
                birthday__lte=date(1999, 12, 31),
            )

class PersonAdmin(admin.ModelAdmin):
    list_filter = [DecadeBornListFilter]
  1. django admin패널에서 simplelist클래스를 상속받으면 위와 같은 형식으로 필터링이 가능하다.
  2. title : 리스트의 이름-어드민 패널에 나옴
  3. lookups : 필수로 작성해야 하는 함수. 무조건 self, request, model_admin을 순서대로 인자로 받아야한다. return 값은 무조건 list of tuple 형태. 튜플의 첫번째 인덱스는 param,두번째 인덱스는 필터의 분류(어드민 패널에 나온다)
  4. queryset : 필수. self, request, queryset을 인자로 받음. 보통 self.value()를 이용해서 필터링 로직을 작성한다. self.value()는 lookups 리턴값의 튜플의 첫번째 인덱스이다.
  5. 함수를 전부 작성했으면 list_filter에 추가 해준다.
profile
스프링 개발자 지망생입니다

0개의 댓글