Добавление дополнительного поля в админке для пользовательского пользователя в Django 1.11 - PullRequest
0 голосов
/ 29 мая 2018

У меня есть пользовательская модель пользователя, которая имеет подкласс AbstractUser с добавленным пользовательским полем.

# model.py
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    ADM = 'admin'
    MEMBER = 'member'
    ROLE_CH = ((ADM, 'Administrator'), (MEMBER, 'Member'))

    role = models.CharField(max_length=20, choices=ROLE_CH, blank=True)

Эта модель также зарегистрирована как модель аутентификации по умолчанию в settings.py

# settings.py
AUTH_USER_MODEL = "main.CustomUser"

Затем в admin.py согласно документации я создаю пользовательскую форму, которая расширяет UserCreationForm, а затем регистрирую ее для пользовательского пользователя.

# admin.py
from django.contrib import admin
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.admin import UserAdmin
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = UserCreationForm.Meta.fields + ('role',)

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm

admin.site.register(CustomUser, CustomUserAdmin)

Однако,это не работает, как ожидалось.Форма Add User остается формой по умолчанию, т.е. присутствуют только поля username, password и password confirmation.Поле role не отображается.

1 Ответ

0 голосов
/ 29 мая 2018

Используйте атрибут form вместо add_form:

class CustomUserAdmin(ModelAdmin):
    form = CustomUserCreationForm

admin.site.register(CustomUser, CustomUserAdmin)

UPD

Первый ответ верен только для ModelAdmin базовый класс, так как он не имеет атрибута add_form.

Для UserAdmin необходимо обновить атрибут add_fieldsets:

class CustomUserAdmin(UserAdmin):
    add_fieldsets = UserAdmin.add_fieldsets + (
        (None, {
            'fields': ('role',),
        }),
    )

admin.site.register(CustomUser, CustomUserAdmin)

В этом случае вам даже не требуется add_form.

...