在 Django 1.11 中为自定义用户在管理员中添加额外字段
Adding extra field in admin for custom user in 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
中,根据 documentation,我创建了一个扩展 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
字段未出现。
使用 form
属性代替 add_form
:
class CustomUserAdmin(ModelAdmin):
form = CustomUserCreationForm
admin.site.register(CustomUser, CustomUserAdmin)
UPD
第一个答案仅对 ModelAdmin
基础 class 正确,因为它没有 add_form
属性。
对于 UserAdmin
你应该更新 add_fieldsets
属性:
class CustomUserAdmin(UserAdmin):
add_fieldsets = UserAdmin.add_fieldsets + (
(None, {
'fields': ('role',),
}),
)
admin.site.register(CustomUser, CustomUserAdmin)
在这种情况下,您甚至不需要 add_form
。
我有一个自定义用户模型,它由 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
中,根据 documentation,我创建了一个扩展 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
字段未出现。
使用 form
属性代替 add_form
:
class CustomUserAdmin(ModelAdmin):
form = CustomUserCreationForm
admin.site.register(CustomUser, CustomUserAdmin)
UPD
第一个答案仅对 ModelAdmin
基础 class 正确,因为它没有 add_form
属性。
对于 UserAdmin
你应该更新 add_fieldsets
属性:
class CustomUserAdmin(UserAdmin):
add_fieldsets = UserAdmin.add_fieldsets + (
(None, {
'fields': ('role',),
}),
)
admin.site.register(CustomUser, CustomUserAdmin)
在这种情况下,您甚至不需要 add_form
。