Archive

[Django] Admin 본문

------ Web ------/Backend

[Django] Admin

enent 2022. 6. 26. 22:04
반응형

0. Overview

Django 의 Admin은 프로세스에 관련된 Admin이 아니라 데이터에 대한 CRUD를 제공한다. 

 

 

1. 데이터 입력/수정

models.py 파일에 정의한 Field 타입에 따라 적합한 UI를 보여준다

#models.py
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateField('date_published')

 

 

2.필드 순서 변경

데이터 변경이 아닌 Admin 상에서 테이블을 보여주는 UI 양식을 변경하고 싶을 때 /polls/admin.py를 통해 변경할 수 있다

#admin.py
from django.contrib import admin
from polls.models import Question, Choice

class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

 

3. 한 화면에서 옵션 여러개 선택하기

QuestionAdmin에서 inlines를 지정해 줌으로서 구현 가능하다.

ChoiceInline Class의 extra에 지정된 값에 따라 한번에 보여주는 Choice text 가 달라진다.

from django.contrib import admin
from polls.models import Question, Choice

# Register your models here.

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 2

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date'],'classes':['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

 

테이블 형식으로 보여주기 

3.의 코드에서 ChoiceInline의 admin.StackedInline -> admin.TabularInline 으로 변경해준다

from django.contrib import admin
from polls.models import Question, Choice


class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 2

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date'],'classes':['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

 

4. Question 내 ListDisplay, ListFilter, Search field 변수 추가

1) List Display

Record list의 이름을 지정해 줄 수 있는 기능이다.

QuestionAdmin 클래스 내 list_display 변수를 추가해 준다.

from django.contrib import admin
from polls.models import Question, Choice

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 2

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date'],'classes':['collapse']}),
    ]
    inlines = [ChoiceInline]
    list_display = ('question_text', 'pub_date')

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

 

2) List Filter

Admin UI 화면 우측에 필요한 변수를 기준으로 Filter 사이드 바를 지정할 수 있는 기능이다.

QuestionAdmin 클래스 내 list_filter 변수를 추가해 준다.

from django.contrib import admin
from polls.models import Question, Choice

class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 2

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date'],'classes':['collapse']}),
    ]
    inlines = [ChoiceInline]
    list_display = ('question_text', 'pub_date')
    list_filter = ['pub_date']

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

 

3) Search_Fields

Admin UI 화면 상단에 검색 박스를 표시할 수 있다.

QuestionAdmin 클래스 내 search_fields 변수를 추가해 준다.

from django.contrib import admin
from polls.models import Question, Choice


class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 2

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields':['question_text']}),
        ('Date information', {'fields':['pub_date'],'classes':['collapse']}),
    ]
    inlines = [ChoiceInline]
    list_display = ('question_text', 'pub_date')
    list_filter = ['pub_date']
    search_fields = ['question_text']

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

 

이외에도 list_per_page, list_max_show_all 등 customize 할 수 있는 기능이 많으므로 필요한 기능을 적절히 지정해줄 수 있다.

 

 

5. Admin 사이트 템플릿 수정

django package에서 기본적으로 바라보고 있는 base_site.html 를 찾아 djangoproject/template/admin/base_site.html로 복사하고, settings.py의 tempplate에  아래와 같이 경로를 등록해 주고 해당 html파일을 수정한다.

( Django package Dir/contrib/admin/templates/admin/base_site.html )

TEMPLATES = [
    {
        ...
        'DIRS': [BASE_DIR / 'templates']
        ...
    }
]

 

 

 

파이썬 웹 프로그래밍  - 4. Django 핵심기능
반응형
Comments