[django admin] list_filter 커스텀

nikevapormax·2023년 10월 26일
0

TIL

목록 보기
111/116
post-custom-banner

Djnago Admin list_filter custom

  • 클라이언트의 니즈에 따라 아티스트 모델에 추천 순위 필드를 생성했다.
  • 기존처럼 list_filter를 만들고, 그냥 필드의 값들이 전부 나오게 할 수도 있었지만, 굉장히 비효율적이라는 느낌이 들었다. 나는 아티스트가 추천 순위를 부여받았는지 아닌지를 한 눈에 확인할 수 있게 하고 싶었다.

  • 따라서 SimpleListFilter을 활용해 list_filter를 커스텀하기로 했다.

코드

  • 먼저 SimpleListFilter를 import 해준다.
from django.contrib.admin import SimpleListFilter
  • 그 다음으로 SimplerListFilter를 오버라이딩해 필터를 커스텀한다.
    • title과 parameter_name 중 parameter_name은 딱히 없어도 문제가 되지 않는 듯하다.
    • title에 적힌 내용이 django admin 필터 영역의 제목으로 들어가게 된다.
    • 현재 나의 필터는 TextChoices로 관리되는 항목들이 들어가는 것이 아니다. 만약 TextChoices 등의 enum 종류의 필드를 보여주려면 [c.country for c in model_admin.model.objects.all()]와 같은 느낌으로 불러오면 될 것 같다.
    • list_filter에 넣어줄 때 따옴표로 묶으면 안된다. 습관으로 인해 따옴표로 묶었다가 시간을 낭비했다.
class RecommendOrderFilter(SimpleListFilter):
    title = "아티스트 추천순위 확인"
    parameter_name = "recommend_order"

    def lookups(self, request, model_admin):
        return [("recommend", "추천순"), ("standard", "기본")]

    def queryset(self, request, queryset):
        if not self.value():
            return queryset
        if self.value() == "recommend":
            return queryset.filter(recommend_order__gt=0)
        if self.value() == "standard":
            return queryset.filter(recommend_order=0)
            
            

class ArtistAdmin(admin.ModelAdmin):
    list_filter = [RecommendOrderFilter]

결과화면

profile
https://github.com/nikevapormax
post-custom-banner

0개의 댓글