본문으로 바로가기

User Admin panel Customizing

category Django, Flask/🔫 Django 2020. 5. 11. 23:17

Admin 패널을 수정해보겠습니다. 

 

startapp을 통해 앱을 생성하면 admin.py를 보실 수 있고, 여기가 admin 패널을 수정하는 곳입니다.

 

 

The Django admin site | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

일반적인 App의 admin.py 크게 두 가지 방식으로 작성될 수 있습니다.

 

1. admin.site.register(모델, 어드민)

 

from django.contrib import admin
from . import models

class UserAdmin(admin.ModelAdmin):
    pass

admin.site.register(models.User, CustomUserAdmin)

 

2. 데코레이터 활용하기

 

여기서 사용된 @은 decorator입니다. decorator는 반드시 클리스 바로 윗줄에 작성되어야 작동합니다.

flask로 웹서버를 구축할 때 사용해봤을 것입니다.

from django.contrib import admin
from . import models

# from . import models에서 같은 위치에서 model.py를 불러 옵니다.
# models.py에서 User 클래스를 @admin.register에 물려줍니다.

@admin.register(models.User)
class UserAdmin(admin.ModelAdmin):
    pass

 

어느 것을 활용하든 결과는 같습니다만 저는 데코레이터를 선호합니다. 깔끔하거든요~

 

 

 

아무 것도 작성하지 않은 pure한 상태는 다음과 같습니다.

 

 

여기에 약간 커스터마이징을 해보겠습니다. 다음과 같이 list_display를 작성해주면 어드민 패널은 수정됩니다. 여기서 "username", "gender" 등은 무작위로 작성한 것이 아니라. models.User에 근거하여 작성된 것입니다.

 

[models.User 예시]

    language = models.CharField(
        choices=LANGUAGE_CHOICES, default="en", max_length=2, null=True, blank=True)

    currency = models.CharField(
        choices=CURRENCY_CHOICES, max_length=6, default="usd", null=True, blank=True)
from django.contrib import admin
from . import models

@admin.register(models.User)
class UserAdmin(admin.ModelAdmin):
    list_display = ("username",
                    "gender",
                    "language",
                    "currency",
                    "superhost")

 


list_display 외에도 여러가지 값을 설정함으로써 admin panel을 제어할 수 있습니다. 해당 값은 modeladmin-options을 검색하여 찾아보도록 합시다.

 

 

The Django admin site | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

list_filter를 하나 추가해서 필터 기능을 추가해보겠습니다.

from django.contrib import admin
from . import models

# Register your models here.
@admin.register(models.User)
class UserAdmin(admin.ModelAdmin):

    """ Custom User Admin """

    list_display = ("username",
                    "gender",
                    "language",
                    "currency",
                    "superhost")

    list_filter = ("language", "currency", "superhost",)

 

 


 

 

그런데,

이러한 커스터마이징하기 전에 기본적인 UserAdmin을 사용할 수 있습니다.

Django는 User에 대한 어드민 패널을 이미 가지고 있습니다.

 

모두 만들어서 사용하겠다면 그냥 django.contrib에서 admin.ModelAdmin를 상속받아 사용하면 되지만 

기본적으로 제공하는 UserAdmin을 사용하겠다면 django.contrib.auth.admin의 UserAdmin을 사용합니다.

 

저는 django가 기본으로 주는 UserAdmin을 사용해보겠습니다.

from django.contrib import admin
# django.contrib.auth.admin에서 기본적인 UserAdmin을 빼올 수 있습니다.
from django.contrib.auth.admin import UserAdmin
from . import models

@admin.register(models.User)
class UserAdmin(UserAdmin):

    pass

 

어드민 패널은 다음과 같이 됩니다. UserAdmin이 제공해주는 그대로입니다.

 

 

그런데 해당 어드민 패널의 세부 내역으로 들어가보면 우리가 모델에 작성한 language, currency 등등이 모두 사라졌습니다.

 

이 문제는 admin.py에서 filedsets를 추가함으로써 해결 가능합니다.

표기법(notation)이 조금 복잡합니다.

 

fieldsets = (
        (
            "원하는 단의 이름",
            {
                "fields": (
                    "넣기를 원하는 field",
                    "넣기를 원하는 field",
                    "넣기를 원하는 field",
                )
            }
        ),
    )

 

from django.contrib import admin
# django.contrib.auth.admin에서 기본적인 UserAdmin을 빼올 수 있습니다.
from django.contrib.auth.admin import UserAdmin
from . import models

@admin.register(models.User)
class UserAdmin(UserAdmin):

    """ Custom User Admin """
    fieldsets = UserAdmin.fieldsets + (
        (
            "Custom", {
                "fields": (
                    "avatar",
                    "gender",
                    "bio",
                    "birthday",
                    "language",
                    "currency",
                    "superhost",
                )
            }
        ),
    )

 

 

세부페이지는 기본 fieldset에서 새로 추가한 Custom을 덧붙였습니다.


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체