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