Django
Django admin 페이지 커스텀하기
끈끈
2023. 5. 23. 09:19
기본 예시
user > admin.py:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from user.models import User
class UserAdmin(BaseUserAdmin):
list_display = ('id', 'username', 'fullname', 'email')
list_display_links = ('username', )
list_filter = ('username', )
search_fields = ('username', 'email', )
fieldsets = (
("info", {'fields': ('username', 'password', 'email', 'fullname', 'join_date',)}),
('Permissions', {'fields': ('is_admin', 'is_active', )}),)
filter_horizontal = []
def get_readonly_fields(self, request, obj=None):
if obj:
return ('username', 'join_date', )
else:
return ('join_date', )
admin.site.register(User, UserAdmin)
User model과 맞춰서 수정하기
아래는 각 기능에 대한 설명
# 예시
filter_horizontal = ['hobby'] # ManyToMany에서 사용
# 추가
ordering = ['id']
# 생성 / 수정 모두 readonly로 설정
# 'join_date'는 non-edit / 'email'은 redonly하면 X
readonly_fields = ('join_date', )
# 생성 시 write 가능, 수정 시 readonly field로 설정
def get_readonly_fields(self, request, obj=None):
if obj: # 특정 데이터를 볼 때
return ('username', 'join_date', ) # readonly_fields로 설정
else: # 특정 데이터가 없을 때, 즉 데이터를 생성할 때
return ('join_date', ) # readonly_fields로 설정
migrate를 하다가 아래와 같은 에러가 난다면 링크 참고
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency user.0001_initial on database 'default'.
Groups 삭제
from django.contrib.auth.models import Group
admin.site.unregister(Group)
TabularInline / StackedInline
from user.models import User, UserProfile, Hobby
# 사용 방법은 TabulaInline과 StackedInline 모두 동일
# 둘 다 사용해보고 뭐가 좋은지 비교해보기
class UserProfileInline(admin.TabularInline):
class UserAdmin(admin.ModelAdmin):
inlines = (
UserProfileInline,
)
admin.site.register(User, UserAdmin)
from user.models import User, UserProfile, Hobby
class UserProfileInline(admin.StackedInline):
model = UserProfile
class UserAdmin(admin.ModelAdmin):
inlines = (
UserProfileInline,
)
admin.site.register(User, UserAdmin)