사용자 계정 설정 폼 사용자 정의

이 문서는 주 메뉴 하단의 “계정 설정”을 클릭하여 찾을 수 있는 사용자 계정 설정 폼을 사용자 정의하는 방법을 설명합니다.

새 패널 추가

이 폼의 각 패널은 사용자 모델 또는 wagtail.users.models.UserProfile 인스턴스에서 작동할 수 있는 별도의 모델 폼입니다.

기본 예시

다음은 사용자 모델에서 작동하는 새 폼을 추가하는 방법의 예시입니다.

# forms.py

from django import forms
from django.contrib.auth import get_user_model

class CustomSettingsForm(forms.ModelForm):

    class Meta:
        model = get_user_model()
        fields = [...]
# wagtail_hooks.py

from wagtail.admin.views.account import BaseSettingsPanel
from wagtail import hooks
from .forms import CustomSettingsForm

@hooks.register('register_account_settings_panel')
class CustomSettingsPanel(BaseSettingsPanel):
    name = 'custom'
    title = "내 사용자 지정 설정"
    order = 500
    form_class = CustomSettingsForm
    form_object = 'user'

속성은 다음과 같습니다.

  • name - 패널의 고유 이름입니다. 모든 폼 필드는 이 이름으로 접두사가 붙으므로 소문자여야 하며 기호를 포함할 수 없습니다.

  • title - 사용자에게 표시되는 제목입니다.

  • order - 탭에서 패널 순서를 지정하는 데 사용됩니다. 내장 Wagtail 패널은 100 에서 시작하여 각 패널마다 100 씩 증가합니다.

  • form_class - 사용자 또는 프로필에서 작동하는 ModelForm 서브클래스입니다.

  • form_object - 사용자에서 작동하려면 user 로 설정하고, 프로필에서 작동하려면 profile 로 설정합니다.

  • tab (선택 사항) - 패널이 나타날 탭을 설정합니다.

  • template_name (선택 사항) - 패널 렌더링에 사용되는 기본 템플릿을 재정의합니다.

UserProfile 모델에서 작동

사용자의 wagtail.users.models.UserProfile 인스턴스의 데이터를 변경하는 패널을 추가하려면 form_object'profile' 로 설정합니다.

# forms.py

from django import forms
from wagtail.users.models import UserProfile

class CustomProfileSettingsForm(forms.ModelForm):

    class Meta:
        model = UserProfile
        fields = [...]
# wagtail_hooks.py

from wagtail.admin.views.account import BaseSettingsPanel
from wagtail import hooks
from .forms import CustomProfileSettingsForm

@hooks.register('register_account_settings_panel')
class CustomSettingsPanel(BaseSettingsPanel):
    name = 'custom'
    title = "내 사용자 지정 설정"
    order = 500
    form_class = CustomProfileSettingsForm
    form_object = 'profile'

새 탭 만들기

SettingsTab 클래스를 사용하여 새 탭을 정의할 수 있습니다.

# wagtail_hooks.py

from wagtail.admin.views.account import BaseSettingsPanel, SettingsTab
from wagtail import hooks
from .forms import CustomSettingsForm

custom_tab = SettingsTab('custom', "사용자 지정 설정", order=300)

@hooks.register('register_account_settings_panel')
class CustomSettingsPanel(BaseSettingsPanel):
    name = 'custom'
    title = "내 사용자 지정 설정"
    tab = custom_tab
    order = 100
    form_class = CustomSettingsForm

SettingsTab 은 세 가지 인수를 받습니다.

  • name - 탭에 사용할 슬러그 (탭에 연결할 때 # 뒤에 배치됨)

  • title - 제목의 표시 이름

  • order - 탭의 순서. 내장 Wagtail 패널은 100 에서 시작하여 각 탭마다 100 씩 증가합니다.

템플릿 사용자 정의

템플릿 이름을 지정하여 패널에 대한 사용자 지정 템플릿을 제공할 수 있습니다.

# wagtail_hooks.py

from wagtail.admin.views.account import BaseSettingsPanel
from wagtail import hooks
from .forms import CustomSettingsForm

@hooks.register('register_account_settings_panel')
class CustomSettingsPanel(BaseSettingsPanel):
    name = 'custom'
    title = "내 사용자 지정 설정"
    order = 500
    form_class = CustomSettingsForm
    template_name = 'myapp/admin/custom_settings.html'
{# templates/myapp/admin/custom_settings.html #}

{# Wagtail이 사용하는 기본 템플릿으로, 폼만 렌더링합니다 #}

{% block content %}
    {% for field in form %}
        {% include "wagtailadmin/shared/field.html" with field=field %}
    {% endfor %}
{% endblock %}