기본 예시
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)
'Django' 카테고리의 다른 글
drf filter __ 언더스코어 (4) | 2023.06.14 |
---|---|
drf swagger 문서화 (1) | 2023.05.29 |
Django sqlite3 mysql로 변경하기 (11) | 2023.05.09 |
DRF BooleanField (2) | 2023.04.25 |
POETRY 가상환경 설정하기 (8) | 2023.04.24 |