일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- programmers
- 리트코드
- RecommendationSystem
- solution
- Spark
- twosum
- Django
- dump
- leetcode
- kibana
- Easy
- 깊이우선탐색
- 알고리즘
- 엘라스틱서치
- python
- Medium
- 프로그래머스
- dfs
- 스파크
- 장고
- 파이썬
- CentOS
- daspecialty
- Algorithm
- ELK
- 키바나
- 해시
- AWS
- elasticsearch
- Optimization
- Today
- Total
Archive
[Django] Admin 본문
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 핵심기능
'------ Web ------ > Backend' 카테고리의 다른 글
[Django] Form (0) | 2022.07.03 |
---|---|
[Django] Template System (0) | 2022.06.28 |
[Django] View / Template Coding Overview (실습2) (0) | 2022.06.26 |
[Django] Model Coding Overview (실습1) (0) | 2022.06.23 |
[Django] 장고 기본개념 ( MVT / Structure / Project생성 / Application생성 ) (0) | 2022.06.19 |