장고 admin을 통한 데이터 관리

guava·2021년 11월 3일
0

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 강의를 듣고 정리한 글입니다.

  • 장고는 기본적인 CRUD를 지원하는 웹UI를 제공한다. 이를 admin이라고 하며 모델 등록을 통해 사용할 수 있다.
  • CMS로 활용할 정도는 아니며 서비스 초기에 관리도구로 사용하기에 좋다.
  • 관리도구를 만들 시간을 줄이고 엔드유저 서비스에 집중할 수 있게 한다.

모델 클래스를 admin에 등록하기

# app/admin.py
from django.contrib import admin

from .models import Post  # 등록할 모델 클래스 임포트


@admin.register(Post)  # 모델을 등록하는 wrapper함수
class PostAdmin(admin.ModelAdmin):
    pass

모델 클래스에 __str__을 구현

위에서 정의한 Admin 클래스에 list_display를 지정해주지 않으면 기본적으로 객체.__str__()의 리턴값을 출력한다. 따라서 __str__를 정의한다.

# app/models.py
from django.db import models


class Post(models.Model):
    message = models.TextField()
    is_publish = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.message

admin의 다양한 속성 정의

  • list_display : 모델 리스트에 출력할 컬럼을 지정한다.
  • list_display_links : list_display에 지정된 이름 중 detail 링크를 걸 속성 리스트
  • search_field : admin 내 검색 UI를 통해 DB를 통한 where 쿼리 대상 필드 리스트
  • list_filter : 지정 필드 값으로 필터링 옵션 제공

추가로 message_length와 같이 함수를 정의해서 필드처럼 사용이 가능하다. list_display에 추가해주었다. 또한 message_length.short_description코드를 작성해서 화면에서 보이는 출력을 바꿀 수도 있다.

# app/admin.py
from django.contrib import admin

from .models import Post


@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['pk', 'message', 'message_length', 'is_publish', 'created_at', 'updated_at']
    list_display_links = ['message']
    search_fields = ['message']
    list_filter = ['is_publish']

    def message_length(self, post):
        return len(post.message)

    message_length.short_description = "메시지 길이"

0개의 댓글