[Django] 7. 장고 튜토리얼 part.7

김학재·2021년 12월 29일
0

백엔드

목록 보기
8/8
post-thumbnail

관리자 페이지 커스터마이징


관리자 폼 커스터마이징

관리 폼이 보이고 작동하는 방법을 커스터마이징하려는 경우, 객체를 등록할 때 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__)"

그리고 제목 부분 수정


이렇게 장고 튜토리얼 초보 자습서가 끝이 났다.
길긴 하지만 생각했던 거보다 쉽고 재밌는 장고였다.

profile
YOU ARE BREATHTAKING

0개의 댓글