Django Model용 관리 사이트 만들기

Kangjik Kim·2025년 1월 8일
0

Post 모델이 DB와 동기화되었으므로 블로그 게시물을 관리하는 간단한 관리 사이트를 만들어 보자.

쟝고에는 컨텐츠 편집에 매우 유용한 내장 관리 인터페이스가 함께 제공된다.

쟝고 사이트는 모델의 메타 데이터를 읽고 프로덕션에 즉시 사용할 수 있는 인터페이스를 제공해 동적으로 만들어진다.

django.contrib.admin 애플리케이션은 이미 INSTALLED_APPS 설정에 포함되어 있으므로 추가할 필요가 없다.

superuser 생성

관리 사이트를 관리할 사용자를 생성해야 한다.

python manage.py createsuperuser

아래와 같은 출력 결과가 차례로 표시되는데, 원하는 사용자 이름, 이메일 및 패스워드를 입력한다.

사용자 이름 (leave blank to use 'kangjik'): admin
이메일 주소: admin@admin.com
Password: 
Password (again): 

그러면 아래와 같이 성공했다는 메시지가 출력된다.

Superuser created successfully.

Django 관리 사이트 접속

python manage.py runserver

위 명령어로 개발 서버를 시작한 후,
브라우저에서 http://127.0.0.1:8000/admin/ 에 접속한다.

아래 사진과 같이 admin 사이트 로그인 페이지가 표시되어야 한다.

앞에서 생성한 superuser로 로그인을 해보자.

그러면 아래와 같은 admin 사이트 인덱스 페이지가 표시될 것이다.

위 스크린샷의 그룹과 사용자 모델은 django.contrib.auth에 있는 쟝고 인증 프레임워크의 일부이다. 사용자(들)을 클릭하면 앞서 생성한 사용자를 볼 수 있다.

admin 사이트에 모델 추가하기

블로그 모델을 관리 사이트에 추가해 보자.

아래와 같이 blog 애플리케이션의 admin.py 파일을 편집한다.

from django.contrib import admin
from .models import Post

# Register your models here.
admin.site.register(Post)

이제 브라우저에서 admin 사이트를 다시 로드하면, 아래와 같이 Post 모델이 추가될 것이다.

Django 관리 사이트에 모델을 등록하면 모델을 살펴보고 간단히 객체를 조회, 수정, 생성 및 삭제할 수 있는 사용자 친화적인 인터페이스를 얻을 수 있다.

Posts 옆에 있는 추가 버튼을 클릭해 새로운 게시글을 추가해보자.

그럼 아래와 같이 쟝고가 모델에 맞추어 동적으로 생성한 입력 폼을 확인할 수 있다.

쟝고는 각 유형의 필드마다 서로 다른 폼의 위젯을 사용한다.

DateTimeField와 같은 복잡한 필드도 JS date picker와 같은 인터페이스로 표시된다.

form을 작성하고 SAVE 버튼을 클릭해 보자.

그럼 성공 메세지가 나오며 게시글 목록 페이지로 리디렉션 된다.

모델 표시 방법 커스터마이징하기

blog 애플리케이션의 admin.py 파일을 편집해보자.

from django.contrib import admin
from .models import Post

# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'slug', 'author', 'publish', 'status']
 

ModelAdmin을 상속한 커스텀 클래스를 사용해 모델이 사이트에 등록되었음을 쟝고 관리 사이트에 알려준다. 이 클래스에는 사이트에 모델을 표시하는 방법과 모델과 상호작용하는 방법에 관한 정보들을 포함시킬 수 있다.

list_display thrtjddmf 사용하면 관리 객체 목록 페이지에 표시할 모델의 필드를 설정할 수 있다.

@admin.register() 데코레이터는 변경 전의 admin.site.register() 함수와 동일한 기능으로 ModelAdmin 클래스의 등록을 수행한다.

몇 가지 추가 옵션으로 admin 모델을 커스터마이징 해보자.

from django.contrib import admin
from .models import Post

# Register your models here.
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'slug', 'author', 'publish', 'status']
    list_filter = ['status', 'created', 'publish', 'author']
    search_fields = ['title', 'body']
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ['author']
    date_hierarchy = 'publish'
    ordering = ['status', 'publish']

브라우저로 돌아가 게시글 목록 페이지를 새로고침하면 아래와 같이 표시된다.

게시물 목록 페이지에 표시되는 필드가 list_display 속성에 지정할 필드이다.

우측 사이드 바에 list_filter 속성에 포함된 필드별로 결과를 필터링하는 영역이 생성되었다.

페이지에 검색 바가 나타났는데, search_fields 속성을 사용해 검색 가능한 필드 목록을 정의했기 때문이다.

검색바 하단에 연월일 단계로 날짜를 고를 수 있는 내비게이션 링크가 위치하는데, 이 링크는 date_hierarchy 속성으로 정의했다.

게시글이 기본적으로 STATUS 및 PUBLISH 컬럼으로 정렬된 것을 볼 수 있는데, 이것은 ordering 속성을 사용해 기본 정렬 기준을 지정했기 때문이다.

다음으로 POST 추가 버튼을 클릭해 변경 사항을 확인해 보자.

새로운 게시글의 제목을 입력하면 slug 필드가 자동으로 채워지는데, prepopulated_fields 속성을 사용해 title 필드의 입력으로 slug 필드를 채우도록 쟝고에 지정했다.

author 필드는 조회 위젯과 함께 표시되는데, raw_id_fields 속성에 의한 것으로

많은 사용자가 있을 때 드롭 다운을 통한 셀렉트 박스 입력보다 훨씬 나을 수 있다.

0개의 댓글