Python Django

Django Admin 사이트 설정 및 커스터마이징 (admin.py)

PyExplorer 2025. 3. 3. 10:41
728x90

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_APPSdjango.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 사이트를 구축해보시기 바랍니다!

728x90