출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

이번에는 Admin PageCustomizing 해보도록 하겠다. 그중에서 User 페이지를 커스터마이징 해보겠다.

 

 

※ admin.py 수정하기 - list_display / list_filter 수정하기

우리가 Django를 처음 실행시키고 localhost:8000/admin 에 들어가서 user 페이지에 들어가면 다음과 같은 화면을 볼 수 있을 것이다:

보안상의 이유로 이메일과 유저네임은 가렸다.

현재 유저네임 / 이메일 / 이름 / 성 / 관리자 여부 를 보여주고 있고, 오른쪽 사이바에서는 이를 필터할 수 있는 내용들이 있다 (관리자여부 / 슈퍼관리자여부 / 활동상태여부 / 그룹)

 

하지만 예를 들어, 우리는 이에 더해 사용자의 활동상태를 보고 싶다. 또한 슈퍼관리자여부는 필터에서 지우고 싶다. 이를 하기 위해서는 우리의 app 에 있는 admin.py를 수정해야 한다. 다음의 코드를 한번 보자:

# admin.py
from django.contrib import admin

class UserAdmin(admin.ModelAdmin):
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
    list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups')


admin.site.unregister(User)
admin.site.register(User, UserAdmin)

여기서 list_display는 우리가 위의 사진에서 봤던 이미 보여지고 있는 사항들이다. list_filter의 경우는 이제 사이드바에 있는 filter할 수 있는 사항들인 것이다. 우리는 여기서 list_displaylist_filter을 수정하면 된다:

from django.contrib import admin

class UserAdmin(admin.ModelAdmin):
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'is_active')
    list_filter = ('is_staff', 'is_active', 'groups')


admin.site.unregister(User)
admin.site.register(User, UserAdmin)

이렇게 설정을 하면 다음과 같이 admin 페이지가 바뀐다:

 

 

※ admin.py 수정하기 - search_fields 수정하기

만약 여기서 특정 사용자를 검색하고 싶다면 어떻게 해야될까? 또는 특정 단어 또는 이메일인 사용자를 검색하고 싶다면 어떻게 해야될까?? 이럴 때 사용하는 것이 search_fields이다:

from django.contrib import admin
from .models import *

class UserAdmin(admin.ModelAdmin):
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'is_active')
    list_filter = ('is_staff', 'is_active', 'groups')
    search_fields = ('username', 'email')

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

search_fields안에 정의된 내용을 우리는 검색을 할 수 있는데, 이렇게 한 후 admin page를 보게 된다면 화면은다음과 같이 보여진다:

search 기능을 확인해보기 위해 사용자를 한명 더 추가했다

이제 검색창에 username 또는 email을 입력하여 사용자를 검색할 수 있다.

 

 

또한, unregister(User)를 하고 register(User, UserAdmin)을 하는 이유는 Django Github에 보면 UserUserAdmin을 불러와서 register 시킨다. 우리가 이를 덮어 씌우는 것이기 때문에, unregister 이후 User라는 이름으로 UserAdmin register의 절차를 반복해주는 것이다.

 

여기서 중요한 것은, list_display에 ManyToManyField를 넣으면 에러가 난다. OneToOneField를 넣어야만 가능하다. 만약 ManyToManyField를 넣고 싶다면, 여기를 한번 참고하길 바란다. 나중에 이에 대해 포스팅할 수 있도록 하겠다.