Spec-Zone.ru › Wagtail 3

Настройка формы профиля пользователя

Этот документ описывает, как настроить форму настроек учетной записи пользователя, доступную по нажатию на «Настройки учетной записи» в нижней части главного меню.

Добавление новых панелей

Каждая панель в этой форме представляет собой отдельную форму модели, которая может работать с экземпляром либо модели пользователя, либо модели 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 = [...]
# 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 = "My custom settings"
    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

Чтобы добавить панель, изменяющую данные в экземпляре 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 = [...]
# 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 = "My custom settings"
    order = 500
    form_class = CustomProfileSettingsForm
    form_object = 'profile'

Создание новых вкладок

Вы можете определить новую вкладку, используя класс SettingsTab:

# hooks.py

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

custom_tab = SettingsTab('custom', "Custom settings", order=300)

@hooks.register('register_account_settings_panel')
class CustomSettingsPanel(BaseSettingsPanel):
    name = 'custom'
    title = "My custom settings"
    tab = custom_tab
    order = 100
    form_class = CustomSettingsForm

SettingsTab принимает три аргумента:

  • name - псевдоним, используемый для вкладки (он размещается после # при ссылке на вкладку)
  • title - отображаемое имя заголовка
  • order - порядок вкладки. Встроенные вкладки Wagtail начинаются с 100 и увеличиваются на 100 для каждой вкладки

Настройка шаблона

Вы можете предоставить собственный шаблон для панели, указав имя шаблона:

# 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 = "My custom settings"
    order = 500
    form_class = CustomSettingsForm
    template_name = 'myapp/admin/custom_settings.html'
{# templates/myapp/admin/custom_settings.html #}

{# This is the default template Wagtail uses, which just renders the form #}

<ul class="fields">
    {% for field in form %}
        {% include "wagtailadmin/shared/field_as_li.html" with field=field %}
    {% endfor %}
</ul>

© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/v3.0.3/extending/custom_account_settings.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API