Добавление дополнительного поля в админ для пользовательского пользователя в Django 1.11
У меня есть пользовательская модель пользователя, которая подкласса 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 ответ
Использование 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
,