Dem*_*ris 6 django django-admin django-custom-user
我有一个自定义用户模型,它是由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)
Run Code Online (Sandbox Code Playgroud)
此模型也注册为默认身份验证模型 settings.py
# settings.py
AUTH_USER_MODEL = "main.CustomUser"
Run Code Online (Sandbox Code Playgroud)
然后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)
Run Code Online (Sandbox Code Playgroud)
但是,它没有按预期工作。该Add User窗体保持即只有默认的一个username,password和password confirmation字段存在。该role字段不会出现。
使用form属性代替add_form:
class CustomUserAdmin(ModelAdmin):
form = CustomUserCreationForm
admin.site.register(CustomUser, CustomUserAdmin)
Run Code Online (Sandbox Code Playgroud)
UPD
第一个答案仅适用于ModelAdmin基类,因为它没有add_form属性。
因为UserAdmin你应该更新add_fieldsets属性:
class CustomUserAdmin(UserAdmin):
add_fieldsets = UserAdmin.add_fieldsets + (
(None, {
'fields': ('role',),
}),
)
admin.site.register(CustomUser, CustomUserAdmin)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您甚至不需要add_form.
| 归档时间: |
|
| 查看次数: |
3120 次 |
| 最近记录: |