Пользовательские модели пользователей
Пример пользовательских форм пользователей
В этом примере показано, как добавить текстовое поле и поле внешнего ключа в пользовательскую модель пользователя и настроить формы пользователей Wagtail для разрешения обновления значений полей.
Создайте пользовательскую модель пользователя. Она должна, как минимум, наследоваться от AbstractBaseUser и PermissionsMixin. В данном случае мы расширяем класс AbstractUser и добавляем два поля. Внешний ключ ссылается на другую модель (не показано).
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
country = models.CharField(verbose_name='country', max_length=255)
status = models.ForeignKey(MembershipStatus, on_delete=models.SET_NULL, null=True, default=1)
Добавьте приложение, содержащее вашу модель пользователя, в INSTALLED_APPS - оно должно быть расположено выше строки 'wagtail.users', чтобы переопределить встроенные шаблоны Wagtail - и установите AUTH_USER_MODEL для ссылки на вашу модель. В этом примере приложение называется users, а модель - User
AUTH_USER_MODEL = 'users.User'
Создайте в вашем приложении пользовательские формы «создания» и «редактирования»:
from django import forms
from django.utils.translation import gettext_lazy as _
from wagtail.users.forms import UserEditForm, UserCreationForm
from users.models import MembershipStatus
class CustomUserEditForm(UserEditForm):
country = forms.CharField(required=True, label=_("Country"))
status = forms.ModelChoiceField(queryset=MembershipStatus.objects, required=True, label=_("Status"))
class CustomUserCreationForm(UserCreationForm):
country = forms.CharField(required=True, label=_("Country"))
status = forms.ModelChoiceField(queryset=MembershipStatus.objects, required=True, label=_("Status"))
Расширьте шаблоны Wagtail для создания и редактирования пользователя. Эти расширенные шаблоны должны быть размещены в каталоге шаблонов wagtailusers/users.
Шаблон create.html:
{% extends "wagtailusers/users/create.html" %}
{% block extra_fields %}
<li>{% include "wagtailadmin/shared/field.html" with field=form.country %}</li>
<li>{% include "wagtailadmin/shared/field.html" with field=form.status %}</li>
{% endblock extra_fields %}
Шаблон edit.html:
{% extends "wagtailusers/users/edit.html" %}
{% block extra_fields %}
<li>{% include "wagtailadmin/shared/field.html" with field=form.country %}</li>
<li>{% include "wagtailadmin/shared/field.html" with field=form.status %}</li>
{% endblock extra_fields %}
Блок extra_fields позволяет вставлять поля под полем last_name в стандартных шаблонах. Существуют и другие варианты переопределения блоков, позволяющие добавлять поля в конец или начало существующих полей, или переопределять все поля.
Добавьте в настройки Wagtail для вашего проекта ссылку на дополнения к форме пользователя:
WAGTAIL_USER_EDIT_FORM = 'users.forms.CustomUserEditForm' WAGTAIL_USER_CREATION_FORM = 'users.forms.CustomUserCreationForm' WAGTAIL_USER_CUSTOM_FIELDS = ['country', 'status']
© 2014-present Torchbox Ltd and individual contributors.
All rights are reserved.
Licensed under the BSD License.
https://docs.wagtail.org/en/stable/advanced_topics/customisation/custom_user_models.html