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]
결과화면