Bonus Book 2. Django Admin 커스터마이징

지금 관리자 페이지(/admin)에 들어가 보면 게시글 목록이 단순히 Post object (1), Post object (2) 처럼 나오거나, 검색 기능이 없어서 관리가 불편할 겁니다. 이곳을 엑셀처럼 보기 편하고, 검색도 되는 강력한 관리 도구로 바꿔봅시다

 

[Bonus Book 2] Django Admin 커스터마이징

boards/admin.py 파일을 열고 아래 코드로 내용을 채워주세요.

(기존에 있던 admin.site.register(Board) 등의 코드는 지우고 이 코드로 덮어쓰시면 됩니다.)

1. 코드 작성 (boards/admin.py)

from django.contrib import admin
from .models import Board, Post, Comment

# 1. 게시판(Board) 관리
@admin.register(Board)
class BoardAdmin(admin.ModelAdmin):
    list_display = ('code', 'title', 'description') # 목록에 보여줄 컬럼
    list_display_links = ('code', 'title')          # 클릭해서 수정할 수 있는 컬럼

# 2. 게시글(Post) 관리 - 여기가 제일 중요!
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    # 목록에 보일 항목들 (제목, 작성자, 게시판, 조회수, 작성일)
    list_display = ('title', 'author', 'board', 'views', 'created_at')
    
    # 우측 필터 사이드바 (게시판별, 작성일별 필터링)
    list_filter = ('board', 'created_at')
    
    # 상단 검색창 (제목, 내용, 작성자 닉네임으로 검색)
    # author__nickname: author(User) 모델의 nickname 필드를 검색하겠다는 뜻
    search_fields = ('title', 'content', 'author__nickname', 'author__username')
    
    # 날짜 계층 구조 (상단에 연도-월-일 네비게이션 생김)
    date_hierarchy = 'created_at'
    
    # 페이지당 보여줄 개수
    list_per_page = 20

# 3. 댓글(Comment) 관리
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
    list_display = ('content_summary', 'post', 'author', 'created_at')
    search_fields = ('content', 'author__username')
    
    # 댓글 내용이 길 수 있으니 앞부분만 잘라서 보여주는 함수
    def content_summary(self, obj):
        return obj.content[:20] + "..." if len(obj.content) > 20 else obj.content
    content_summary.short_description = "댓글 내용"

2. 확인해 보기

  1. 서버가 켜져 있는지 확인하고, 브라우저에서 /admin 페이지를 새로고침합니다.
  2. Boards 앱 밑에 Posts를 클릭해 보세요.
    • 이제 제목, 작성자, 조회수가 표처럼 깔끔하게 나오나요?
    • 오른쪽에 Filter 사이드바가 생겼나요?
    • 맨 위에 **검색창(Search)**이 생겼나요?
  3. 검색창에 테스트로 작성했던 글의 제목이나 작성자를 검색해 보세요.