ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Part 7 관리자 페이지 커스터마이징
    Django 2022. 7. 4. 15:45

    관리자 폼 커스터마이징

    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을 커스터마이징 하기 위해서
    admin을 상속받는 클래스를 하나 만들어 줍니다.

     

    클래스 내에 우리가 필요로 하는 값을 직접 부여해서 커스터마이징합니다.

    필드를 직접 명시하여 보여지는 데이터 순서를 변경할 수 있습니다.

    (여기서는 “발행일”이 “설문” 필드 앞에 오게 만들었습니다.)

     

    모델 어드민 클래스를 만든 다음, admin.site.register()에 두 번째 인수로 전달합니다.

     

     

     

     

     

    다음과 같이 필드가 많아 관리가 필요한경우
    필드 셋을 통해 필드를 묶어서 제목을 주는것도 가능합니다.

    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)

     

     

     

     

    관리자 페이지를 보면 다음과 같이 변경된것을 확인할 수 있습니다.

     

     

     

     

     

     

     

     

     

     

    관련된 객체 추가

    admin.site.register(Choice)을 추가하여 
    Question과 마찬가지로 Choice를 관리자에 등록하였습니다.

     


    그러나 실제로 이것은 Choice 객체를 시스템에 추가하는 비효율적인 방법입니다. 
    Question 객체를 생성할 때 여러 개의 Choices를 직접 추가할 수 있다면 더 좋을 것입니다.

     

     

    Choice 모델에 대한 register() 호출을 제거하고
    Question 등록 코드를 다음과 같이 수정해 주세요.

    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)

     

     

    Question admin에서 Choice를 직접 관리할 수 있도록 변경하였습니다.

     

     

     

    choice 슬롯이 3개(extra = 3)가 나오게 됩니다.

    (이미 choice객체가 있는 경우에도 빈 슬롯이 3개가 나오게 됩니다.)

     

     

     

     

    보여지는 모습이 화면을 너무 많이 차지한다면
    StackedInline를 TabularInline으로 변경해주면
    테이블 기반 형식으로 심플하게 변경됩니다.

     

     

     

     

     

     

     

     

     

     

    관리자 변경 목록(change list) 커스터마이징

    이번에는 시스템의 모든 질문을 표시하는 목록 페이지를 커스터마이징하겠습니다.

     

     

    현재는 Question만 보입니다.

     

     

     

    list_display를 사용하여
    질문과 발행일 그리고 최근 데이터인지를 확인하는 필드도 추가하겠습니다.

     

     

     

     

    화면을 보면 다음과 같이 변경된 것을 확인할 수 있습니다.

     

     

     

     

     

     

    커스터마이징한 필드에 대해서 몇 가지 속성을 부여하여 편리성을 향상시킬 수 있습니다.

    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

     

     

    boolean형 값을 True를 주면 True나 False같은 값을 문자열에서 아이콘 모습으로 보이게 됩니다.

    ordering은 필드를 정렬할때의 기준을 발행일로 하겠다는 것이고

    description은 타이틀을 변경시켜줍니다.

     

     

     

     

    polls/admin.py에 다음을 추가해 주세요.

    list_filter = ['pub_date']
    search_fields = ['question_text']

     

     

    list_filter = ['pub_date']는 사이트 왼쪽에 필터 기능이 생기고

    search_fields = ['question_text']는 상단에 검색창이 생깁니다.

     

     

     

     

    잘 적용된 모습을 확인할 수 있습니다!

     

     

     

     

     

     

     

     

     

     

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

    모든 관리자 페이지 상단에 “Django administration”이 있다는 것은 우스꽝스럽습니다.
    이는 Django의 템플릿 시스템을 사용하여 변경할 수 있습니다.

     

     

    admin 관련 템플릿은 최상위 위치에서 관리합니다.
    최상위 위치(MYSITE)에 템플릿 디렉토리를 만든 후 하위 디렉토리인 admin디렉토리를 만들어주세요.

     

     

    다음으로 장고에게 템플릿 위치를 위치를 알려줍니다.
    settiongs.py에 다음과 같이 추가하여 방금 만든 템플릿 위치를 명시해 줍니다.

     

     

     

     

     

    현재 admin 템플릿 위치는 장고 소스코드 안에 있습니다.

    장고 소스코드의 위치를 잘 모르겠다면

    py -c "import django; print(django.__path__)" 명령어를 실행해주면 됩니다.

    (보통 가상환경 내부에 위치합니다!)

     

     

     

     

    장고 소스코드 위치를 찾고 admin 템플릿 위치로 이동해주세요

     

     

    admin 하위 디렉토리에 base_site.html파일을 방금 만든 디렉토리로 복사해주세요.

     

     

     

     

     

     

     

    이제  {{ site_header|default:_('Django administration') }} (중괄호 포함)을

    적합한 사이트 이름으로 바꾸면 됩니다.

     

     

     

     

     

    정상적으로 변경된 모습을 확인할 수 있습니다 !

     

     

     

     

     

     

     

     

    출처 : django 웹 프로그래밍 강좌 (#7 customize admin)(django customize the admin)

    Django part7

    'Django' 카테고리의 다른 글

    Part 6 정적 파일  (0) 2022.07.03
    Part 5 테스팅  (0) 2022.07.02
    Part 4 폼과 기본 뷰  (0) 2022.07.02
    Part 3 뷰와 템플릿  (0) 2022.07.01
    Part 2-2 관리자 페이지  (0) 2022.06.29
Designed by Tistory.