이 영역을 누르면 첫 페이지로 이동
caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

페이지 맨 위로 올라가기

caputdraconis

네트워크 관점에서의 클라우드 컴퓨팅을 공부하는 중입니다 :)

[Django] admin에서 list_filter에 넣을 커스텀 필터를 만들 수 있을까?

  • 2022.07.06 19:13
  • 언어&프레임워크/Django
글 작성자: caputdraconis
반응형

현재 django admin에서는 Model Admin에 list_filter로 해당 모델의 필드 이름을 넣으면, 아래와 같이 필터링 기능을 제공합니다.

 

하지만 조금 색다른 필터링 기능을 구현하고 싶다면..? 커스텀 필터를 구현하면 됩니다!

 

간단하게 모델을 아래와 같이 만들어줍니다.

class TestModel(models.Model):
	id = models.AutoField() # pk
    order = models.IntegerField() # 사용자에게 몇 번째로 디스플레이 될지를 나타내는 필드(order==0이면 첫번째로 사용자에게 디스플레이 됩니다.)
    title = models.TextField() # TestModel의 제목을 저장하는 필드
    createdat = models.DateTimeField(default=timezone.now) # 해당 모델의 오브젝트가 생성된 일자를 저장할 필드
test1 = TestModel.objects.create(title='첫번째!', order=0)
test2 = TestModel.objects.create(title='두번째!', order=1)
test3 = TestModel.objects.create(title='세번째!', order=2)
test4 = TestModel.objects.create(title='네번째!', order=3)
test5 = TestModel.objects.create(title='사용자에게 보여지지 않은 오브젝트', order=-1)

test1.save()
test2.save()
test3.save()
test4.save()
test5.save()

TestModel.order는 주석으로 작성된 것과 같이 사용자에게 디스플레이 되는 순서를 의미합니다.

만약 아래와 같이 4개의 TestModel 오브젝트가 저장된다면, test5를 제외한 다른 모델들은 위에서부터 하나하나 순서대로 사용자에게 디스플레이 되게 됩니다.

 

만약 django admin에서 사용자에게 보여질 오브젝트(order >= 0)와 사용자에게 보여지지 않을 오브젝트(order < 0)를 기준으로 필터링을 하고 싶다면..? 이때 필요한게 커스텀 필터링입니다!

 

아래와 같이 작성하면 가능합니다.

from django.contrib.admin import SimpleListFilter

class TestModelCustomFiltering(SimpleListFilter):
	title = "Displaying / Dropped"  # 필터링 이름을 여기서 정해줍니다!
    parameter_name = "pages"  # 여기는 아무거나~

    def lookups(self, request, model_admin):
        # filter option을 정해주는 메소드입니다.
        return [
            ("displaying", "보여지는 오브젝트"),
            ("dropped", "보여지지 않는 오브젝트"),
        ]

    def queryset(self, request, queryset):
        if self.value() == "dropped":
            return queryset.distinct().filter(order__lt=0)
        if self.value():
            return queryset.distinct().filter(order__gte=0)

class TestModelAdmin(admin.ModelAdmin):
	list_filter = [TestModelCustomFiltering, ]
반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Django] admin edit view에 테이블을 추가하고 싶을땐?

    [Django] admin edit view에 테이블을 추가하고 싶을땐?

    2022.07.09
  • [Django] DjangoAdmin.SearchFields에 ChoiceField가 필요했어

    [Django] DjangoAdmin.SearchFields에 ChoiceField가 필요했어

    2022.06.11
  • [Django] 프로젝트에 toast-ui-editor 적용하기(django admin)

    [Django] 프로젝트에 toast-ui-editor 적용하기(django admin)

    2022.06.10
  • [Django] Django 프로젝트 중 맞닥뜨린 높은 벽들

    [Django] Django 프로젝트 중 맞닥뜨린 높은 벽들

    2022.05.24
다른 글 더 둘러보기

정보

caputdraconis 블로그의 첫 페이지로 이동

caputdraconis

  • caputdraconis의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 분류 전체보기 (168)
      • Cloud (3)
      • Computer Network (12)
      • Database (2)
      • Terraform (2)
      • 🥚고리즘 (13)
      • 겅부겅부🙃 (10)
        • Naver CS50 코칭스터디 (2)
        • Machine Learning (1)
        • Computing System (6)
      • 언어&프레임워크 (20)
        • Python (4)
        • Django (10)
        • Node JS (1)
        • C++ (2)
        • Java (1)
        • Flutter (2)
      • Security (76)
        • WebHacking Study (11)
        • 지옥방 스터디 (22)
        • 여름방학 스터디 (2)
        • PWN Study (6)
        • SUA Reversing Study (3)
        • PWN (3)
        • WebHacking (20)
        • Reversing (4)
      • 알고 있으면 도움되지 않을까,,? (23)
      • 일상다반사 (1)
      • 근황 정리 (1)
      • 42 Seoul (1)
        • Setting (1)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • Python
    • 파이썬
    • old-16
    • 리스트함수
    • 파이썬기초
    • 웹해킹.kr
    • 파이썬함수
    • 드림핵

    나의 외부 링크

    • Github
    • solved.ac
    • caputdraconis@kakao.com

    정보

    caputdraconis의 caputdraconis

    caputdraconis

    caputdraconis

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. Copyright © caputdraconis.

    티스토리툴바