Django Admin 사이트 설정 및 커스터마이징 (admin.py)
Django에서는 기본적으로 제공하는 Django Admin 사이트를 활용하여 데이터베이스 모델을 쉽게 관리할 수 있습니다. 기본적인 Django Admin 사이트를 설정하는 것뿐만 아니라, 보다 효율적인 데이터 관리를 위해 커스터마이징하는 것이 중요합니다.
이번 포스팅에서는 Django Admin 사이트 설정 및 커스터마이징 방법을 자세히 설명드리겠습니다.
1. Django Admin 사이트 기본 설정
Django 프로젝트를 생성하면 기본적으로 admin.py
파일이 생성됩니다. 이를 통해 Admin 사이트에서 모델을 관리할 수 있도록 설정할 수 있습니다.
1.1 Django Admin 활성화하기
Django의 Admin 기능을 사용하려면 INSTALLED_APPS
에 django.contrib.admin
이 포함되어 있어야 합니다. 기본적으로 Django 프로젝트를 생성하면 포함되어 있습니다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 추가한 앱
'myapp',
]
1.2 슈퍼유저 생성하기
Admin 사이트에 접근하려면 슈퍼유저(Superuser) 계정을 생성해야 합니다. 다음 명령어를 실행하여 슈퍼유저를 생성할 수 있습니다.
python manage.py createsuperuser
명령어 실행 후, 사용자 이름, 이메일, 비밀번호를 입력하면 슈퍼유저 계정이 생성됩니다.
1.3 Admin 사이트 실행하기
Django 개발 서버를 실행한 후 브라우저에서 http://127.0.0.1:8000/admin/
으로 접속하면 Django Admin 사이트에 로그인할 수 있습니다.
python manage.py runserver
2. Django Admin에 모델 등록하기
Admin 사이트에서 모델을 관리하려면 admin.py
파일에 해당 모델을 등록해야 합니다.
2.1 기본적인 모델 등록
admin.site.register()
를 사용하여 모델을 Admin 사이트에 등록할 수 있습니다.
예제: 모델 정의
먼저, models.py
에서 모델을 정의합니다.
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
published_date = models.DateField()
def __str__(self):
return self.title
예제: admin.py
에서 모델 등록
from django.contrib import admin
from .models import Book
admin.site.register(Book)
위와 같이 모델을 등록하면 Admin 사이트에서 해당 모델을 관리할 수 있습니다.
3. Django Admin 커스터마이징
3.1 ModelAdmin
을 활용한 커스터마이징
ModelAdmin
클래스를 사용하면 Admin 사이트에서 모델을 더욱 효과적으로 관리할 수 있습니다.
3.1.1 리스트 화면 커스터마이징 (list_display
)
Admin 사이트에서 모델 리스트 화면에서 어떤 필드를 표시할지 설정할 수 있습니다.
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
admin.site.register(Book, BookAdmin)
이제 Admin 사이트에서 Book
모델의 리스트 화면에서 제목, 저자, 출판일이 표시됩니다.
3.1.2 검색 기능 추가 (search_fields
)
검색 창을 추가하려면 search_fields
를 설정하면 됩니다.
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
search_fields = ('title', 'author') # 제목과 저자로 검색 가능
admin.site.register(Book, BookAdmin)
3.1.3 필터 기능 추가 (list_filter
)
필터 기능을 추가하면 특정 조건에 따라 데이터를 빠르게 필터링할 수 있습니다.
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'published_date')
search_fields = ('title', 'author')
list_filter = ('published_date',)
admin.site.register(Book, BookAdmin)
3.1.4 필드 정렬 (ordering
)
기본 정렬 순서를 설정할 수 있습니다.
class BookAdmin(admin.ModelAdmin):
ordering = ('-published_date',) # 출판일 기준 내림차순 정렬
admin.site.register(Book, BookAdmin)
4. 인라인 모델 관리 (InlineModelAdmin)
Admin 사이트에서 연관된 모델을 한 화면에서 관리할 수 있도록 인라인 모델을 설정할 수 있습니다.
예제: Review
모델과 Book
모델 관계 설정
class Review(models.Model):
book = models.ForeignKey(Book, on_delete=models.CASCADE)
review_text = models.TextField()
rating = models.IntegerField()
def __str__(self):
return f"{self.book.title} - {self.rating}점"
인라인 모델 설정
class ReviewInline(admin.TabularInline): # StackedInline도 사용 가능
model = Review
extra = 1 # 기본 추가 입력 필드 개수 설정
class BookAdmin(admin.ModelAdmin):
inlines = [ReviewInline]
admin.site.register(Book, BookAdmin)
이제 Book
모델 상세 페이지에서 Review
모델을 함께 관리할 수 있습니다.
5. Django Admin 사이트 커스터마이징
5.1 Admin 사이트 제목 및 헤더 변경
admin.py
에서 Admin 사이트의 제목과 헤더를 변경할 수 있습니다.
admin.site.site_header = "My Bookstore Admin"
admin.site.site_title = "My Bookstore"
admin.site.index_title = "관리자 페이지"
5.2 커스텀 CSS 및 JS 추가
Admin 사이트의 스타일을 변경하려면 static/admin/css
경로에 CSS 파일을 추가하고 admin.py
에서 로드해야 합니다.
class BookAdmin(admin.ModelAdmin):
class Media:
css = {
'all': ('admin/css/custom_admin.css',)
}
js = ('admin/js/custom_admin.js',)
6. 결론
Django Admin 사이트는 기본적인 모델 관리 기능을 제공할 뿐만 아니라, ModelAdmin
을 활용하여 검색, 필터, 정렬, 인라인 모델, UI 커스터마이징 등을 자유롭게 설정할 수 있습니다.
이 포스팅을 참고하여 보다 효율적인 Django Admin 사이트를 구축해보시기 바랍니다!
'Python Django' 카테고리의 다른 글
Django ModelForm을 이용한 사용자 입력 처리 (0) | 2025.03.05 |
---|---|
Django Form 기본 개념 및 활용법 (forms.py) (0) | 2025.03.04 |
Django ORM 기본 쿼리셋 사용법 (filter(), get(), all() 등) (0) | 2025.03.02 |
Django 모델(Model) 정의 및 마이그레이션 이해하기 (0) | 2025.03.01 |
Django에서 데이터베이스 설정하기 (settings.py에서 DATABASES 설정) (0) | 2025.02.28 |