수학과의 좌충우돌 프로그래밍

[Django] admin 페이지 효율적으로 다루기 본문

웹프로그래밍/Django

[Django] admin 페이지 효율적으로 다루기

ssung.k 2019. 7. 17. 01:54

django 에서 기본적으로 주어지는 admin 페이지는 개발자에게 있어서 많은 편리함을 제공해줍니다. 이를 커스텀하여서 더 효율적으로 사용해보도록 합시다.

 

admin 페이지에 models 등록
# {앱이름}/admin.py

from django.contrib import admin
form .models import Post

# 방법 1
admin.site.register(Post)

# 방법 2 

class MyAdmin(admin.ModelAdmin):
  ...
admin.site.register(Post, MyAdmin)

# 방법 3
@admin.register(Post)
class MyAdmin(admin.ModelAdmin):
  ...

models 에는 Post 가 존재하고 이를 import 해와서 등록시키는 과정입니다. 총 3가지 방법이 있는데 각각에 대해서 간단히 알아보도록 합시다.

  • 방법 1은 기본 ModelAdmin 을 통해서 admin 페이지에 등록을 합니다.
  • 방법 2는 Modeladmin 을 상속해 이를 커스튬하고 커스튬한 클래스를 통해 등록을 해줍니다.
  • 방법 3은 방법 2 와 유사하지만 데코레이터를 통해서 더 간결하게 등록을 합니다.

 

admin 페이지에 기능추가하기

admin 페이지에 여러 기능을 추가 하는 커스튬이 가능합니다. 이 방법들에 대해서 몇 가지 살펴보겠습니다. 그리고 예시를 위해 Post 라는 model 을 정의하고 이를 통해 알아보도록 하겠습니다.

# core/models.py

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=30)
    content = models.TextField()
    is_published = models.BooleanField(default=False)

 

  • list_display

    기본적으로 하나의 오브젝트에 대해 하나의 값만을 표시합니다. 여러 값을 표시하기 위해서 list_display 로 추가해줄 수 있습니다.

    # core/admin.py
    
    @admin.register(Post)
    class MyAdmin(admin.ModelAdmin):
      list_display = ['id', 'title', 'short_content', 'is_published' ]
      
      def short_content(self, post):
        return post.content[:10]
    

    content를 전부 출력하는 건 너무 길 거 같으니 아래와 같이 short_content로 10글자로 slicing 해줄 수 있고 이는 list_display에 함수이름을 매칭함으로서 적용할 수 있습니다.

 

  • list_display_links

    admin 사이트에서 세부 항목으로 들어가는 link 를 어디에 걸어줄 지 선택할 수 있습니다. 기본적으로는 가장 앞에 오는 field 에 링크를 걸게 되는데 예시의 경우, id 에 있는 것 보다는 title 에 있는게 더 자연스러울 거 같아서 title에 걸어주었습니다.

    # core/admin.py
    
    @admin.register(Post)
    class MyAdmin(admin.ModelAdmin):
      list_display = ['id', 'title', 'short_content', 'is_published' ]
      list_display_links = ['title']
      
      def short_content(self, post):
        return post.content[:10]
    
  • list_filter

    list_filter 를 통해서는 오른쪽 UI 를 통해서 원하는 값들만 filtering 해서 볼수 있습니다.

    # core/admin.py
    
    @admin.register(Post)
    class MyAdmin(admin.ModelAdmin):
      list_display = ['id', 'title', 'short_content', 'is_published' ]
      list_display_links = ['title']
      list_filter = ['is_published']
      
      def short_content(self, post):
        return post.content[:10]
    

     

  • search_fields

    admin 에서 검색 UI 를 통해서 원하는 데이터를 검색할 수 있습니다. search_fieldstitle 에 대해서만 걸어주었습니다.

    @admin.register(Post)
    class MyAdmin(admin.ModelAdmin):
      list_display = ['id', 'title', 'short_content', 'is_published' ]
      list_display_links = ['title']
      list_filter = ['is_published']
    	search_fields = ['title']
      
      def short_content(self, post):
        return post.content[:10]
    

 

 

마지막으로 이들에 대한 최종적인 admin 페이지 입니다.

 

Comments