반응형
Notice
Recent Posts
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Today
Total
관리 메뉴

오식랜드

[python] Django Admin Page 본문

dev-log/python

[python] Django Admin Page

개발하는 오식이 2023. 1. 30. 22:35
반응형

쟝고에서는 관리자페이지를 ui와 함께 제공해준다. 관리자페이지를 이용해 데이터베이스, 컨텐츠를 관리할 수 있다.

Admin 생성

py manage.py createsuperuser

위 명령어를 입력해서 어드민 계정을 생성하면 된다

그리고 localhost 주소에 /admin에 접속하면 관리자페이지가 뜬다

앞으로 이 페이지에서 우리가 만든 앱이나 모듈을 관리할 수 있다

Admin에 추가하기

처음에 페이지에 진입하면 아무 내용이 없다.

우리가 만든 polls앱을 관리자 페이지에서 관리할 수 있도록 하자

polls/admin.py 에 아래 내용을 입력해주자

from django.contrib import admin
from .models import Question
# Register your models here.

admin.site.register(Question)

Question 데이터베이스가 추가된걸 볼 수 있다.

이 관리자페이지를 통해 cmd창처럼 쿼리문을 작성하지 않고 바로 ui를 통해 데이터베이스를 추가, 수정 삭제할 수 있다

Admin 커스터마이징

polls/admin.py 에서 커스터마이징이 가능하다

fields : 관리자 화면에서 보여지는 순서 변경

# 기존
admin.site.register(Question)

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

admin.site.register(Question, QuestionAdmin)

class로 Question에 관한 어드민을 커스텀할 수 있다

fieldsets : fields에 제목 부여 가능

지금은 단 두개 뿐이지만, 수십개의 필드가 있는 폼에 관련해서는 fildset으로 분할하는게 좋다

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

admin.site.register(Question, QuestionAdmin)

Question Admin에서 Choice 추가하기

질문을 생성할 때 선택지도 한번에 같이 만들 수 있게 해보자

inlines : 다른 model을 함께 추가 가능

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

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

admin.site.register(Question, QuestionAdmin)

Database list 커스터마이징

데이터베이스 목록페이지를 수정해보자

Question에는 질문과 발행일 두가지가 있는데, 지금은 질문만 목록에 노출되고 있다.

list_display : 튜플 형태로 데이터 목록의 제목 설정

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

속성 부여

커스터마이징한 필드에 대해서 속성을 추가해 편리성을 증가시킬 수 있다

polls/models.py에서 수정하면 된다

from django.contrib import admin

@admin.display(
    boolean=True,
    ordering='pub_date',
    description='Published recently?',
)
  • boolean : 문자 모습 대신 아이콘으로 출력
  • ordering : 필트 타이틀 클릭 시 기준
  • description : 타이틀을 변경하는 속성

 

 

목록 정렬

list_filter : 목록 필터링 추가

polls/admin.py에서 QuestionAdmin에 추가

list_filter = ['pub_date']

 

search_fields : 검색 필터링 추가

search_fields = ['question_text']

목록 맨 위에 검색 창이 추가됩니다.

누군가가 검색어를 입력하면, 장고는 question_text 필드를 검색합니다

 

 

 

 

Admin template 변경

지금까지는 polls앱에서 admin을 수정해왔지만, template은 mysite(최상위 프로젝트)에서 수정할 수 있다.

mysite에 폴더를 두개 생성해준다.

mysite/template/admin

mysite/setting.py TEMPLATES 에서 우리가 사용할 템플릿을 명시해준다

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ~
            ],
        },
    },
]

그리고 가상서버 내에 있는 admin templates을 그대로 복사하여 mysite/templates/admin에 붙여넣기 해주자

가상서버 내에서 어떻게 찾지?

cmd에 아래 명령어를 입력해보면 경로를 구체적으로 알 수 있다

py -c "import django; print(django.__path__)"

그리고 그 경로대로 간 뒤 아래 경로대로 또 따라가자

django/contrib/admin/templates/admin/base_site.html

base_site.html를 복사해오면 된다

그리고 마음대로 수정해주면, 커스터마이징 완료!

 

 

 

반응형

'dev-log > python' 카테고리의 다른 글

[python] Django Form 생성  (0) 2023.01.30
[python] Django Database 사용  (0) 2023.01.30
[python] Django API 사용하기  (0) 2023.01.30
[python] Django Database 사용  (0) 2023.01.30
[python] Django 프로젝트 생성  (0) 2023.01.30
Comments