(customizing_group_views)= # 그룹 편집/생성 뷰 사용자 정의 앱 내에서 그룹을 관리하는 뷰는 폼과 같이 해당 뷰의 모든 공유 구성 요소에 대한 단일 참조 지점 역할을 하는 '뷰셋' 클래스로 수집됩니다. 뷰셋을 서브클래싱함으로써 이러한 구성 요소를 재정의하고 그룹 관리 인터페이스의 동작을 사용자 정의할 수 있습니다. ## 사용자 지정 편집/생성 폼 이 예제는 Wagtail 관리자에서 '그룹 편집' 및 '그룹 생성' 뷰의 폼을 사용자 정의하는 방법을 보여줍니다. Active Directory 그룹을 Django 그룹과 연결해야 한다고 가정해 봅시다. Active Directory 그룹에 대한 모델을 다음과 같이 생성합니다. ```python # myapp/models.py from django.contrib.auth.models import Group from django.db import models class ADGroup(models.Model): guid = models.CharField(verbose_name="GUID", max_length=64, db_index=True, unique=True) name = models.CharField(verbose_name="Group", max_length=255) domain = models.CharField(verbose_name="Domain", max_length=255, db_index=True) description = models.TextField(verbose_name="Description", blank=True, null=True) roles = models.ManyToManyField(Group, verbose_name="Role", related_name="adgroups", blank=True) class Meta: verbose_name = "AD group" verbose_name_plural = "AD groups" ``` 그러나 Wagtail 그룹 '편집' 또는 '생성' 뷰에는 역할 필드가 없습니다. 이를 추가하려면 `wagtail.users.forms.GroupForm` 을 상속하고 새 필드를 추가합니다. ```python # myapp/forms.py from django import forms from wagtail.users.forms import GroupForm as WagtailGroupForm from .models import ADGroup class GroupForm(WagtailGroupForm): adgroups = forms.ModelMultipleChoiceField( label="AD groups", required=False, queryset=ADGroup.objects.order_by("name"), ) class Meta(WagtailGroupForm.Meta): fields = WagtailGroupForm.Meta.fields + ("adgroups",) def __init__(self, initial=None, instance=None, **kwargs): if instance is not None: if initial is None: initial = {} initial["adgroups"] = instance.adgroups.all() super().__init__(initial=initial, instance=instance, **kwargs) def save(self, commit=True): instance = super().save() instance.adgroups.set(self.cleaned_data["adgroups"]) return instance ``` 이제 기본 Wagtail `GroupViewSet` 클래스를 상속하고 `get_form_class` 메서드를 재정의하여 사용자 지정 폼을 그룹 뷰셋에 추가합니다. ```python # myapp/viewsets.py from wagtail.users.views.groups import GroupViewSet as WagtailGroupViewSet from .forms import GroupForm class GroupViewSet(WagtailGroupViewSet): def get_form_class(self, for_update=False): return GroupForm ``` 그룹 '편집'/'생성' 템플릿에 필드를 추가합니다. ```html+django {% extends "wagtailusers/groups/edit.html" %} {% load wagtailusers_tags wagtailadmin_tags i18n %} {% block extra_fields %}