python manage.py createsuperuser# --- [ 기본적은 등록 방법 ] ---
from django.contrib import admin
from .models import MyModel
admin.site.register(MyModel)
list_displaylist_filtersearch_fieldsraw_id_fieldslist_editablelist_per_pageorderingis_stafffrom django.contrib import admin
from .models import Book
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ["title", "author", "publication_date", "price"]
list_filter = ["publication_date", "author"]
search_fields = ["title", "author__name"] # 관계형 필드 검색 가능
ordering = ["-publication_date"]
fields / exclude
fieldsets
readonly_fields
prepopulated_fields
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
fieldsets = [
("기본 정보", {"fields": ["title", "author"]}),
("상세 정보", {"fields": ["isbn", "price"], "classes": ["collapse"]}),
]
class ReviewInline(admin.TabularInline):
model = Review
extra = 1 # 추가로 보여줄 빈 폼의 개수
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
inlines = [ReviewInline] # Book 페이지에서 Review도 같이 관리
from django.contrib import admin
from .models import Post, Comment
# 기존 방식: admin.site.register(Post, PostAdmin) 대신 사용
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ['title', 'created_at']
# 여러 모델 동시 등록 가능
@admin.register(Comment, Reply)
class CommentAdmin(admin.ModelAdmin):
pass
list_display에 모델 필드가 아닌 커스텀 메서드를 보여줄 때 사용
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
list_display = ['name', 'is_expensive', 'stock_status']
# 1. 계산된 값에 정렬 기능 추가
@admin.display(description='고가 제품 여부', boolean=True, ordering='price')
def is_expensive(self, obj):
return obj.price > 10000
# 2. None 값 처리 및 컬럼명 지정
@admin.display(description='재고 상태', empty_value='알 수 없음')
def stock_status(self, obj):
if obj.stock is None:
return None
return f"{obj.stock}개 남음"
리스트 페이지 상단의 "Action" 드롭다운 메뉴(예: 선택된 객체 삭제)에 새로운 기능을 추가할 때 사용
# 함수를 클래스 외부에 정의하거나 내부에 정의할 수 있습니다.
@admin.action(description="선택된 게시물을 '발행' 상태로 변경")
def make_published(modeladmin, request, queryset):
# 선택된 쿼리셋을 한 번에 업데이트
updated_count = queryset.update(status='published')
modeladmin.message_user(request, f"{updated_count}건이 발행되었습니다.")
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
actions = [make_published]