당신은 멋쟁이, 우리는 장고쟁이~

0%

Writing your first Django app, part 7 - 3편

어드민 변경메뉴 목록 꾸미기


현재 Question 어드민 페이지는 좋아 보입니다.


change list 페이지를 변경해 보도록 합시다. change list 페이지는 시스템에 있는 모든 질문들을 출력합니다.




기본값으로, Django 는 각 객체의 str() 을 출력해 줍니다.



하지만, 때때로, 각각의 fields 를 출력하는게 더 도움될때가 있습니다.
어드민 옵션으로, list_display 를 사용해서 display 를 바꿔줄수 있습니다.

list_display 어드민 옵션



list_display 어드민 옵션은,

field 명들을 가진 튜플로 이루어져 있습니다.

polls/admin.py 파일을 열어서, list_display 를 써보도록 합시다.



1
2
3
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date')


was_published_recently() 메서드도,

list_display 안에 추가해 봅니다.


1
2
3
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text'. 'pub_date', 'was_published_recently')

list_display 튜플안에 있는 필드대로, 테이블이 생성되고, 데이터가 출력 되는것을 확인 할수 있습니다.



컬럼의 헤더를 클릭하면, 값을 기반으로 정렬이 가능합니다.


was_published_recently 헤더는 예외입니다, arbitrary method 를 정렬하는것은 지원하지 않기 때문입니다.

polls/models.py 파일을 개선 시킬수 있습니다.

몇가지 속성들을 추가해 줍니다.



1
2
3
4
5
6
7
8
class Question(models.Model):
# ...
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'

이 메서드 속성들에 대해서 더 알고 싶으면, list_display 문서를 참조 하면 됩니다.


list_filter 옵션


polls/admin.py 파일을 다시 열고,

Question 의 변경 리스트 페이지의 개선사항을 추가합니다.

list_filter 를 사용해서, QuestionAdmin 에 추가해줍니다.



1
2
3
4
5
6
7
8
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('질문들', {'fields': ['question_text']}),
('날짜정보', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
list_display = ('question_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']

어드민에서 Filter 사이드바를 추가해주어서, 사람들이 pub_date 로 필터를 할수 있게 해줍니다.



출력된 필터 타입은, 필터를 하고 싶은 필드의 타입을 따라갑니다.


pub_date 는 DateTimeField 이기 때문에,
Django 에서는, filter option 으로,
“Any date”, “Today”, “Past 7 days”, “This month”, “This Year” 라고 적절하게 옵션을 써줍니다.


검색기능 추가


모양새가 좋아졌습니다. 검색 기능도 가능하게 추가해 보겠습니다.


polls/admin.py 파일을 열고,

아래 내용을 QuestionAdmin 클래스에 추가해 줍니다.

search_fields = [‘quesiton_text’]



1
2
3
4
5
6
7
8
9
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('질문들', {'fields': ['question_text']}),
('날짜정보', {'fiedls': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
list_display = ('quesiton_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
search_fields = ['question_text']


화면에 검색바가 하나 추가되는것을 확인 할수 있습니다.



검색 바에 내용을 입력하면, Django 는 question_text 필드를 조회할것 입니다.

사용하고 싶은 필드들을 입력할수 있습니다.
다만, 서치바 뒤에서 작업되는 방식은 LIKE 쿼리문이 동작하는 것과 동일한 방식으로 사용됩니다.
사용 가능한 필드 숫자를 제한하여 데이터베이스가 조회 작업을 하기 편하게 해줘야 합니다.



Change List, 즉 변경 리스트는 pagination 을 제공합니다.
기본값은 100개의 아이템을 한페이지에 출력 하는것입니다.



마치며..


어드민 파일 클래스에, 아래 내용들을 추가하면,

디스플레이가 바뀐다는것을 복습하고 넘어갑니다.

1
2
3
list_display = ('question_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
search_fields = ['question_text']