안녕하세요 !!
오늘은 장고의 list_filter 대해서 알아보겠습니다 !
또한 리스트필터를 배우면서 우리만의 리스트필터를 만들어서 커스텀을 해봅시다 ^^
list_filter
장고에서 손쉽게 관리자 패널에서 filter을 기능으로 원하는 항목으로 필터링 해서 내용을 보여줍니다 !
또한 저희가 등록한 것에 대해서 손쉽게 커스텀 해서 필터링을 해줄수도 있어요 !
저는 일단 admin 패널에서는 아래와 같이 사용해줍시다 !
list_filter이라고 간단하게 써주시면 ! admin 패널에서 손쉽게 필터링을 할 수 있는 기능이 생깁니다 !
아래와 같이요 !! 저는 이미 몇가지 숫자를 등록해서 아래처럼 보입니다 !
이렇게 model에 등록한 것으로 손쉽게 할 수 있는데요 !
하지만 ! 저기서는 저희가 커스텀을 해서 foreign key로 등록한것들도 손쉽게 필터링이 가능하죠 !
아래처럼 장고의 마법을 부려서 외래키로 등록한 것에 대해서 __를 줘서 그 안에 항목들로도 필터링이 가능합니다 !
저는 user안에 is_host라는 컬럼도 추가 했으니 아래처럼 할 수 있죠 ^^
그러면 이렇게 나옵니다 !!
자자 ! 그러면 여기서 메인으로 넘어갑시다 !
특별한 문구로 필터링 하자
자 ! 이런 문구로 어떻게 필터링이 가능할까요???
'Good', 'Greate', 'Wow'
저런식으로도 가능할까요???
물론 가능합니다 !!! SimpleListFIlter을 이용합시다 !
class WordFilter(admin.SimpleListFilter):
title = "Filter by Words!" # 1
parameter_name = "word" # 2
def lookups(self, request, model_admin): # 3
return [
("good", "Good"),
("greate", "Greate"),
("wow", "Wow"),
]
def queryset(self, request, reviews): # 4
word = self.value()
if word:
return reviews.filter(payload__contains=word)
else:
reviews
이런식으로 가능합니다 !!!
먼저 여기서 가장 필수적인게 ! 1,2,3,4 입니다 !!! 꼭 필수입니다 !
일단 admin 화면부터 봐봅시다 ! 바로 이해가 갑니다 ^^
밑에 처럼 나옵니다 !!!!
아직 여기만 보면 잘 모르겠죠???
그럼 저기 옆에 새로생긴것을 한번 눌러봅시다 !!! 그러면 URL이 바뀌는것을 볼 수 있습니다 !
위에처럼 나옵니다 !!!
그럼 위에서는 어떻게 반영 됐는지 봐볼까요???
바로 아래와 같이 알 수 있습니다.
코드상에서 title부분은 「Filter by Words!」
parameter_name 부분이 ! URL에서 word입니다 !!
lookups는 list나 touple으로 return해야합니다 ! 그리고 ('url에 보여지는 값', 'filter에 보여지는 값') 이 됩니다 !
즉 ! 위에서 보시면 ('wow', 'Wow') 부분이 있는데 wow는 url으로 갔으며 Wow는 오른쪽 filter에 표시가 됐습니다!
마지막으로 queryset부분인데요 ! 여기선 url에서 받아온 값으로 저희가 filter를 해서 값을 반환해줬습니다
이렇게 SimpleListFilter을 이용해서 저희가 원하는 방향으로 filtering을 하는 법을 배워봤습니다 !!!
정말 많은 곳에서 응용을 할 수 있으니
자신의 사이트에 맞게 운용해서 사용해봅시다 ^^
TIP으로 ! 밑에처럼 별점 몇개이상, 이하도 필터링을 할 수 있어요 !!! ㅎㅎ
그럼 오늘도 즐코딩합시다 !