Настройка формы настроек учетной записи пользователя
В данном документе описывается, как настроить форму настроек учетной записи пользователя, которая доступна по нажатию на «Настройки учетной записи» в нижней части основного меню.
Добавление новых панелей
Каждая панель на этой форме представляет собой отдельную форму модели, которая может работать с экземпляром модели пользователя или модели 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.core 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.core 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.core 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.core 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/v2.16.3/extending/custom_account_settings.html