Add_fieldsets Django UserAdmin?

Я следую руководству по созданию настраиваемого пользователя для целей аутентификации. В руководстве используется определенное свойство 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 (удаление имени пользователя)

Результатом этого является то, что вы начинаете с ограниченного набора полей формы, и новые поля «волшебным образом» появляются в форме после того, как вы щелкаете «Сохранить» (что в данном случае делает то же самое, что и «Сохранить и продолжить редактирование»).

djvg 17.01.2019 21:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
12
1
5 764
3

Ответы 3

Переменная класса 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). Это просто умное использование административной машины.

djvg 17.01.2019 20:55

Поле 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',)

Другие вопросы по теме