backend/Django&Python

[Django] admin 페이지 커스텀하기

findTheValue 2021. 8. 27. 02:28

첫번째 장고 앱 작성하기, part 7

관리자 폼 커스터마이징

수정 폼의 필드를 재정렬해 작동하는 법을 본다.

admin.site.register(Question) 를 아래와 같이 수정한다.

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으로 분할하는 것이 좋다.

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)

fieldsets의 각 튜플의 첫 번째 요소는 fieldset의 제목.

관련 객체 추가

  • Question 필드는 데이터베이스의 모든 질문을 포함하는 select box.
  • Django는 ForeignKey가 admin에서 <select>로 표현되어야 함을 알고 있다.
  • ForeignKey 관계를 가진 모든 객체는 Question옆의 Add Another링크가 붙는다.
  • Add Another를 클릭하면 Add question 폼이 나타난다.
  • Choice-inline -> Question을 생성할때 여러개의 choice객체를추가시켜줌
  • StackedInline 대신에 TabularInline을 사용하면, 관련된 객체는 좀 더 조밀하고 테이블 기반 형식으로 표시 돼 리스트가 늘어나 가독성이 안좋아 지는 것을 막는다.
  • list_display 어드민 옵션을 사용해 튜플형태로 각 항목 상태 보여줌. - display decorator 공부
  • list_filter = ['pub_date'] 로 필터 추가해 pub_date 필드로 필터링 할 수 있도록 함
  • search_fields = ['question_text'] 로 검색창 추가
  • 장고는 question_text 필드를 검색
  • LIKE 쿼리를 사용하기 때문에 검색 필드의 수를 적당한 수로 제한하면 데이터베이스가 검색을 더 쉽게 할 수 있다.
  • 추가 기능

관리자 룩앤필 커스터마이징

$ python -c "import django; print(django.__path__)"
  • 위 코드로 장고 소스파일 위치 찾고 base template 찾기.
  • 실제 프로젝트에서는 django.contrib.admin.AdminSite.site_header 속성을 사용하여 이 개별 커스터마이징
  • 장고는 모든 커스텀을 보장한다 수정이 필요한 소스파일을 개별 프로젝트 template으로 복사해와 수정하면 프로젝트 내에 있는 template부터 탐색하기 때문에 적용된다.
  • 물론 개인 폴더에 찾을 template이 없다면 sub directory인 django.contrib.admin에서 찾게된다.
  • Django가 템플릿을 찾는 방법에 대한 자세한 정보는 템플릿 로딩 문서

admin 인덱스 페이지 수정하기

  • Django admin 인덱스 페이지의 모양과 느낌을 수정하고 싶을 수도 있다.
  • 기본적으로 admin 어플리케이션과 함께 등록된 INSTALLED_APPS의 모든 어플리케이션을 사전순으로 표시한다. 인덱스는 admin의 가장 중요한 페이지이고, 사용하기 쉬워야 합니다.
  • 커스터마이징 할 템플릿은 admin/index.html.
  • (이전 섹션의 admin/base_site.html와 동작업 = 기본 디렉토리에서 커스텀 템플릿 디렉토리로 복사). 파일을 편집하면 app_list라는 템플릿 변수를 사용하는 것을 볼 수 있고 이 변수는 설치된 모든 장고 앱을 포함한다. 이를 사용하는 대신 최선의 방법이라고 생각한다면 개체 별 admin 페이지에 대한 링크를 하드 코딩 할 수 있다.

프로젝트 템플릿 커스터마이징

  • 디렉토리는 BASE를 기본으로 탐색한다.