오식랜드
[python] Django Admin Page 본문
쟝고에서는 관리자페이지를 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 |