```{currentmodule} wagtail.snippets.views.snippets ``` (wagtailsnippets_custom_admin_views)= # 스니펫에 대한 관리자 뷰 사용자 지정 각 스니펫 모델에 대한 관리자 뷰에 대한 추가 사용자 지정은 사용자 지정 {class}`~SnippetViewSet` 클래스를 통해 달성할 수 있습니다. `SnippetViewSet` 은 스니펫별 속성이 기본적으로 제공되는 {class}`.ModelViewSet` 의 서브클래스입니다. 따라서 사용자 지정 목록 뷰(예: 사용자 지정 열 및 필터 추가), 사용자 지정 메뉴 항목 생성 등 `ModelViewSet` 에서 제공하는 것과 동일한 사용자 지정을 지원합니다. 계속하기 전에 [](wagtailsnippets_registering)에 설명된 대로 `register_snippet` 을 데코레이터 대신 함수로 사용하여 스니펫 모델을 등록했는지 확인하십시오. 데모를 위해 다음 `Member` 모델과 `MemberFilterSet` 클래스를 고려해 봅시다. ```python # 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` 서브클래스입니다. ```python # 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) ``` (wagtailsnippets_icon)= ## 아이콘 `SnippetViewSet` 에 {attr}`~.ViewSet.icon` 속성을 정의하여 이 스니펫 유형에 대해 관리자 전체에서 사용되는 아이콘을 지정할 수 있습니다. `icon` 은 [Wagtail 아이콘 라이브러리에 등록](../../advanced_topics/icons)되어야 합니다. `icon` 이 설정되지 않으면 기본 `"snippet"` 아이콘이 사용됩니다. ## URL 네임스페이스 및 기본 URL 경로 {attr}`~.ViewSet.url_namespace` 속성을 재정의하여 뷰의 URL 패턴에 대한 사용자 지정 URL 네임스페이스를 사용할 수 있습니다. 설정되지 않으면 `wagtailsnippets_{app_label}_{model_name}` 으로 기본 설정됩니다. 한편, {attr}`~.ViewSet.url_prefix` 를 재정의하면 Wagtail 관리자 URL에 대한 기본 URL 경로를 사용자 지정할 수 있습니다. 설정되지 않으면 `snippets/app_label/model_name` 으로 기본 설정됩니다. 유사한 URL 사용자 지정은 {attr}`~SnippetViewSet.chooser_admin_url_namespace`, {attr}`~SnippetViewSet.chooser_base_url_path`, {meth}`~SnippetViewSet.get_chooser_admin_url_namespace`, {meth}`~SnippetViewSet.get_chooser_admin_base_path` 를 통해 스니펫 선택기 뷰에서도 가능합니다. ## 목록 뷰 `SnippetViewSet` 에서 사용할 수 있는 다양한 속성을 통해 사용자 지정 열, 필터, 페이지 매김 등을 추가하여 목록 뷰를 사용자 지정할 수 있습니다. 자세한 내용은 [`ModelViewSet` 에 대한 목록 뷰 사용자 지정](modelviewset_listing)을 참조하십시오. 또한 {meth}`~SnippetViewSet.get_queryset` 메서드를 재정의하여 목록 뷰의 기본 쿼리셋을 사용자 지정할 수 있습니다. ## 복사 뷰 복사 뷰는 기본적으로 활성화되어 있으며 모델에 대한 'add' 권한이 있는 사용자가 액세스할 수 있습니다. 비활성화하려면 {attr}`~.ModelViewSet.copy_view_enabled` 를 `False` 로 설정하십시오. 자세한 내용은 [`ModelViewSet` 에 대한 복사 뷰 사용자 지정](modelviewset_copy)을 참조하십시오. ## 검사 뷰 검사 뷰는 대부분의 모델에 유용하지 않으므로 기본적으로 비활성화되어 있습니다. 활성화하려면 {attr}`~.ModelViewSet.inspect_view_enabled` 를 `True` 로 설정하십시오. 자세한 내용은 [`ModelViewSet` 에 대한 검사 뷰 사용자 지정](modelviewset_inspect)을 참조하십시오. (wagtailsnippets_templates)= ## 템플릿 템플릿 사용자 지정은 `ModelViewSet` 과 동일하게 작동하지만, {attr}`~.ModelViewSet.template_prefix` 는 기본적으로 `wagtailsnippets/snippets/` 입니다. 자세한 내용은 [`ModelViewSet` 에 대한 템플릿 사용자 지정](modelviewset_templates)을 참조하십시오. (wagtailsnippets_menu_item)= ## 메뉴 항목 기본적으로 스니펫 모델을 등록하면 사이드바 메뉴에 "스니펫" 메뉴 항목이 추가됩니다. 그러나 {attr}`~.ViewSet.add_to_admin_menu` 를 `True` 로 설정하여 스니펫 모델이 사이드바 메뉴에 자체 최상위 메뉴 항목을 갖도록 구성할 수 있습니다. 자세한 내용은 [`ModelViewSet` 에 대한 메뉴 사용자 지정](modelviewset_menu)을 참조하십시오. `add_to_admin_menu` 가 `True` 로 설정된 사용자 지정 `SnippetViewSet` 서브클래스의 예시: ```python from wagtail.snippets.views.snippets import SnippetViewSet class AdvertViewSet(SnippetViewSet): model = Advert icon = "crosshairs" menu_label = "광고" menu_name = "adverts" menu_order = 300 add_to_admin_menu = True ``` 여러 스니펫 모델을 {attr}`~SnippetViewSetGroup` 을 사용하여 단일 메뉴 항목 아래에 그룹화할 수도 있습니다. `SnippetViewSet` 클래스에 {attr}`~SnippetViewSet.model` 속성을 설정한 다음 각 개별 모델 또는 뷰셋 대신 `SnippetViewSetGroup` 서브클래스를 등록하여 이를 수행할 수 있습니다. ```python from wagtail.snippets.views.snippets import SnippetViewSet, SnippetViewSetGroup class AdvertViewSet(SnippetViewSet): model = Advert icon = "crosshairs" menu_label = "광고" menu_name = "adverts" class ProductViewSet(SnippetViewSet): model = Product icon = "desktop" menu_label = "제품" menu_name = "banners" class MarketingViewSetGroup(SnippetViewSetGroup): items = (AdvertViewSet, ProductViewSet) menu_icon = "folder-inverse" menu_label = "마케팅" menu_name = "marketing" # 여러 SnippetViewSet 클래스를 그룹화하기 위해 SnippetViewSetGroup 클래스를 사용하는 경우, # 각 스니펫 모델 또는 뷰셋을 개별적으로 등록할 필요가 없습니다. register_snippet(MarketingViewSetGroup) ``` 기본적으로 사이드바 "스니펫" 메뉴 항목은 자체 메뉴 항목으로 구성되지 않은 스니펫 모델만 표시합니다. 모든 스니펫 모델에 자체 메뉴 항목이 있는 경우 "스니펫" 메뉴 항목은 표시되지 않습니다. 이 동작은 [](wagtailsnippets_menu_show_all) 설정을 사용하여 변경할 수 있습니다. 뷰셋을 사용자 지정하는 데 사용할 수 있는 다양한 추가 속성이 있습니다. {class}`~SnippetViewSet` 을 참조하십시오.