Я следую руководству по созданию настраиваемого пользователя для целей аутентификации. В руководстве используется определенное свойство add_fieldsets в UserAdmin. Что это значит? Кажется, я не могу найти никакой документации по этому поводу.
Вот фрагмент:
class UserAdmin(UserAdmin):
"""Define admin model for custom User model with no email field."""
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Personal info', {'fields': ('first_name', 'last_name')}),
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
('Contact info', {'fields': ('contact_no',)}),)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2'),}),)
list_display = ('email', 'first_name', 'last_name', 'is_staff')
search_fields = ('email', 'first_name', 'last_name')
ordering = ('email',)
Вот руководство, которым я следил: Как использовать электронную почту в качестве имени пользователя для аутентификации Django (удаление имени пользователя)






Переменная класса add_fieldsets используется для определения полей, которые будут отображаться на странице создания пользователя.
К сожалению, это плохо документировано, и ближе всего к документации я нашел комментарий в примере кода на https://docs.djangoproject.com/en/2.1/topics/auth/customizing/ (страница поиска для add_fieldsets).
Ключ classes устанавливает любые настраиваемые классы CSS, которые мы хотим применить к разделу формы.
Ключ fields устанавливает поля, которые вы хотите отображать в своей форме.
В вашем примере страница создания позволит вам установить email, password1 и password2.
Причина отсутствия документации, вероятно, состоит в следующем: «... add_fieldsets - это не стандартModelAdminатрибут. UserAdmin переопределяет get_fieldsets, чтобы использовать этот атрибут при создании пользователя». (из ссылки выше auth / customizing / docs). Это просто умное использование административной машины.
Поле add_fieldsets работает аналогично полю fieldsets и позволяет управлять макетом страниц администратора, но, в частности, страницей создания объекта, тогда как поле fieldsets используется для управления страницей объекта изменения.
А с помощью поля add_fieldsets вы можете решить, какие поля должны отображаться на странице создания объекта, добавлять описание и т. д.
В вашем примере он создаст раздел без имени (как установлено на None), установит определенную ширину для всех полей с помощью набора ключей classes и отобразит поля электронной почты, пароля1 и пароля2.
с помощью набора ключей fields
Надеюсь, я развеял ваши сомнения !!
используйте класс BaseUserAdmin, он включает некоторые функции, такие как add_froms и add_fieldsets
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
class UserAdmin(BaseUserAdmin):
"""Define admin model for custom User model with no email field."""
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Personal info', {'fields': ('first_name', 'last_name')}),
('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
('Contact info', {'fields': ('contact_no',)}),)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2'),}),)
list_display = ('email', 'first_name', 'last_name', 'is_staff')
search_fields = ('email', 'first_name', 'last_name')
ordering = ('email',)
Результатом этого является то, что вы начинаете с ограниченного набора полей формы, и новые поля «волшебным образом» появляются в форме после того, как вы щелкаете «Сохранить» (что в данном случае делает то же самое, что и «Сохранить и продолжить редактирование»).