스니펫에 대한 관리자 뷰 사용자 지정¶
각 스니펫 모델에 대한 관리자 뷰에 대한 추가 사용자 지정은 사용자 지정 SnippetViewSet 클래스를 통해 달성할 수 있습니다. SnippetViewSet 은 스니펫별 속성이 기본적으로 제공되는 ModelViewSet 의 서브클래스입니다. 따라서 사용자 지정 목록 뷰(예: 사용자 지정 열 및 필터 추가), 사용자 지정 메뉴 항목 생성 등 ModelViewSet 에서 제공하는 것과 동일한 사용자 지정을 지원합니다.
계속하기 전에 스니펫 등록에 설명된 대로 register_snippet 을 데코레이터 대신 함수로 사용하여 스니펫 모델을 등록했는지 확인하십시오.
데모를 위해 다음 Member 모델과 MemberFilterSet 클래스를 고려해 봅시다.
# models.py
from django.db import models
from wagtail.admin.filters import WagtailFilterSet
class Member(models.Model):
class ShirtSize(models.TextChoices):
SMALL = "S", "작은"
MEDIUM = "M", "중간"
LARGE = "L", "큰"
EXTRA_LARGE = "XL", "매우 큰"
name = models.CharField(max_length=255)
shirt_size = models.CharField(max_length=5, choices=ShirtSize.choices, default=ShirtSize.MEDIUM)
def get_shirt_size_display(self):
return self.ShirtSize(self.shirt_size).label
get_shirt_size_display.admin_order_field = "shirt_size"
get_shirt_size_display.short_description = "크기 설명"
class MemberFilterSet(WagtailFilterSet):
class Meta:
model = Member
fields = ["shirt_size"]
다음은 스니펫의 해당 SnippetViewSet 서브클래스입니다.
# wagtail_hooks.py
from wagtail.admin.panels import FieldPanel, ObjectList, TabbedInterface
from wagtail.admin.ui.tables import UpdatedAtColumn
from wagtail.snippets.models import register_snippet
from wagtail.snippets.views.snippets import SnippetViewSet
from myapp.models import Member, MemberFilterSet
class MemberViewSet(SnippetViewSet):
model = Member
icon = "user"
list_display = ["name", "shirt_size", "get_shirt_size_display", UpdatedAtColumn()]
list_per_page = 50
copy_view_enabled = False
inspect_view_enabled = True
admin_url_namespace = "member_views"
base_url_path = "internal/member"
filterset_class = MemberFilterSet
# 또는 filterset_class 대신 다음을 사용할 수 있습니다.
# list_filter = ["shirt_size"]
# 또는
# list_filter = {"shirt_size": ["exact"], "name": ["icontains"]}
edit_handler = TabbedInterface([
ObjectList([FieldPanel("name")], heading="세부 정보"),
ObjectList([FieldPanel("shirt_size")], heading="기본 설정"),
])
register_snippet(MemberViewSet)
아이콘¶
SnippetViewSet 에 icon 속성을 정의하여 이 스니펫 유형에 대해 관리자 전체에서 사용되는 아이콘을 지정할 수 있습니다. icon 은 Wagtail 아이콘 라이브러리에 등록되어야 합니다. icon 이 설정되지 않으면 기본 "snippet" 아이콘이 사용됩니다.
URL 네임스페이스 및 기본 URL 경로¶
url_namespace 속성을 재정의하여 뷰의 URL 패턴에 대한 사용자 지정 URL 네임스페이스를 사용할 수 있습니다. 설정되지 않으면 wagtailsnippets_{app_label}_{model_name} 으로 기본 설정됩니다. 한편, url_prefix 를 재정의하면 Wagtail 관리자 URL에 대한 기본 URL 경로를 사용자 지정할 수 있습니다. 설정되지 않으면 snippets/app_label/model_name 으로 기본 설정됩니다.
유사한 URL 사용자 지정은 chooser_admin_url_namespace, chooser_base_url_path, get_chooser_admin_url_namespace(), get_chooser_admin_base_path() 를 통해 스니펫 선택기 뷰에서도 가능합니다.
목록 뷰¶
SnippetViewSet 에서 사용할 수 있는 다양한 속성을 통해 사용자 지정 열, 필터, 페이지 매김 등을 추가하여 목록 뷰를 사용자 지정할 수 있습니다. 자세한 내용은 ModelViewSet 에 대한 목록 뷰 사용자 지정을 참조하십시오.
또한 get_queryset() 메서드를 재정의하여 목록 뷰의 기본 쿼리셋을 사용자 지정할 수 있습니다.
복사 뷰¶
복사 뷰는 기본적으로 활성화되어 있으며 모델에 대한 ‘add’ 권한이 있는 사용자가 액세스할 수 있습니다. 비활성화하려면 copy_view_enabled 를 False 로 설정하십시오. 자세한 내용은 ModelViewSet 에 대한 복사 뷰 사용자 지정을 참조하십시오.
검사 뷰¶
검사 뷰는 대부분의 모델에 유용하지 않으므로 기본적으로 비활성화되어 있습니다. 활성화하려면 inspect_view_enabled 를 True 로 설정하십시오. 자세한 내용은 ModelViewSet 에 대한 검사 뷰 사용자 지정을 참조하십시오.
템플릿¶
템플릿 사용자 지정은 ModelViewSet 과 동일하게 작동하지만, template_prefix 는 기본적으로 wagtailsnippets/snippets/ 입니다. 자세한 내용은 ModelViewSet 에 대한 템플릿 사용자 지정을 참조하십시오.