본문 바로가기

문돌이 존버/Django 스터디

장고(Django) admin 페이지 커스터마이징

반응형
본 글은 Holix의 "리액트와 함께 장고 시작하기 Complete" 강의를 듣고 작성한 일지입니다.

오늘은 장고 admin 페이지와 관련하여 어떤 기능이 있는지 전반적으로 살펴보려고 합니다. 이전에 장고를 독학하며 야매(?)로 다뤘던 것 같은데 최근에 강의를 듣게 되어 다시 한 번 정리할 계획입니다.

# models.py
from django.db import models

# Create your models here.
class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    is_public = models.BooleanField(default=False, verbose_name='공개여부') # verbose_name을 설정하면 admin 페이지에 그대로 표현됨
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    # Java의 toString 역할
    def __str__(self):
        # return f'Custom Post object ({self.id})'
        return self.content
# admin.py
from django.contrib import admin
from .models import Post
# Register your models here.

# 첫 번째 방법
# admin.site.register(Post)

# 두 번째 방법: 장식자 문법(Wrapping)
@admin.register(Post)
class PostAdmin(admin.ModelAdmin): # list_display, search_fields 등은 ModelAdmin의 옵션들
    list_display = ['id', 'content', 'content_length', 'is_public', 'created_at', 'updated_at'] # pk는 id의 alias
    list_display_links = ['content']
    list_filter = ['created_at', 'is_public']
    search_fields = ['content'] # 검색창(메시지 내용을 검색)

    # 사용자 지정 함수
    def content_length(self, post): # post 객체가 넘어옴
        return len(post.content)

위에서 search_fields = ['content'] 에서 내용 안에 특정 단어를 검색하는 기능을 추가했습니다. 이것이 어떻게 내부에서 작동되는지 살펴보면 아래와 같습니다.

python manage.py shell
from blog1.models import Post
qs = Post.objects.all().filter(content__icontains='다시') # '다시'를 포함하는지 확인
print(qs.query)

sql문에서 특정 단어를 포함하는지 확인하려면 LIKE %특정 단어% 라고 표현하면 됩니다.

장고의 ModelAdmin 클래스에는 더 많은 기능들이 있기 때문에 이외의 내용은 공식 문서를 참고하시면 될 것 같습니다.

728x90
반응형