관리 폼이 보이고 작동하는 방법을 커스터마이징하려는 경우, 객체를 등록할 때 Django에 원하는 옵션을 알려주면 커스터마이징할 수 있다.
# polls/admin.py
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)
모델의 관리자 옵션을 변경할 때 admin.site.register()
에 인수를 전달하면 된다.
필드가 많은 경우는 폼을 fieldset으로 분할
# polls/admin.py
from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
Question과 관련된 객체인 Choice 추가하기
# polls/admin.py
from django.contrib import admin
from .models import Choice, Question
# ...
admin.site.register(Choice)
ForeignKey 관계를 가진 객체들이 위 화면과 같이 나타난다.
이런 방식 말고 Question 객체를 생성할 때 여러 개의 Choice를 직접 추가할 수 있도록.
# polls/admin.py
from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
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)
Django에게 Choice 객체는 Question 관리자 페이지에서 편집된다. 기본적으로 3가지 선택 항목을 제공함
이라고 알려줌
위 코드에서 admin.StackedInline을 admin.TabularInline으로 바꾸면 아래와 같이 된다
모든 질문을 표시하는 페이지 조정
# polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
임의의 메서드의 출력에 의한 정렬은 자동 지원 X
정렬되도록 수정 가능
# polls/models.py
from django.contrib import admin
class Question(models.Model):
# ...
@admin.display(
boolean=True,
ordering='pub_date',
description='Published recently?',
)
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
display() 데코레이터는 장고 3.2에서 새로 등장
# mysite/settings.py
TEMPLATES = [
../
'DIRS': [BASE_DIR / 'templates'],
...
]
장고 소스 코드 디렉토리의 base_site.html 파일을 프로젝트 디렉토리에 templates/admin 디렉토리 생성한 뒤 그 안에 복사
Django 소스 파일 위치 찾기
python -c "import django; print(django.__path__)"
그리고 제목 부분 수정
이렇게 장고 튜토리얼 초보 자습서가 끝이 났다.
길긴 하지만 생각했던 거보다 쉽고 재밌는 장고였다.