Пользовательские модели пользователей
Пример пользовательских форм пользователей
Этот пример демонстрирует, как добавить текстовое поле и поле внешнего ключа к пользовательской модели пользователя и настроить формы пользователей 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/v2.16.3/advanced_topics/customisation/custom_user_models.html