Пользовательские модели пользователей
Пример пользовательских форм пользователей
Этот пример демонстрирует, как добавить текстовое поле и поле внешнего ключа к пользовательской модели пользователя и настроить пользовательские формы 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 %}
{% include "wagtailadmin/shared/field_as_li.html" with field=form.country %}
{% include "wagtailadmin/shared/field_as_li.html" with field=form.status %}
{% endblock extra_fields %}
Шаблон edit.html:
{% extends "wagtailusers/users/edit.html" %}
{% block extra_fields %}
{% include "wagtailadmin/shared/field_as_li.html" with field=form.country %}
{% include "wagtailadmin/shared/field_as_li.html" with field=form.status %}
{% 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/v3.0.3/advanced_topics/customisation/custom_user_models.html