Django自定义用户无Admin组管理表单问题求助
解决Django自定义用户Admin无法管理组和权限的问题
1. 先给自定义用户补上权限关联能力
默认Django用户模型靠PermissionsMixin实现组和权限的关联,你的CustomUser必须继承这个类才能拥有相关字段。修改models.py:
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin from django.db import models class CustomUserManager(BaseUserManager): # 保留你已有的管理器代码 def create_user(self, email, username, password=None, **extra_fields): # ...你的实现... def create_superuser(self, email, username, password=None, **extra_fields): # ...你的实现... class CustomUser(AbstractBaseUser, PermissionsMixin): # 保留你已有的用户字段 email = models.EmailField(unique=True) username = models.CharField(max_length=150, unique=True) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) objects = CustomUserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['username'] # 保留你其他自定义方法
2. 配置Admin后台显示组和权限管理
如果你的admin.py是自定义的用户管理类,得把组和权限字段加进去,或者直接继承官方的UserAdmin:
方式一:直接用官方UserAdmin
from django.contrib.auth.admin import UserAdmin from .models import CustomUser admin.site.register(CustomUser, UserAdmin)
方式二:自定义Admin类并添加字段
要是你需要自定义表单布局,就在fieldsets和add_fieldsets里加入权限相关字段:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from .models import CustomUser class CustomUserAdmin(BaseUserAdmin): fieldsets = ( (None, {'fields': ('email', 'password')}), ('个人信息', {'fields': ('username',)}), ('权限配置', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), ('重要日期', {'fields': ('last_login', 'date_joined')}), ) # 新增用户时的表单字段 add_fieldsets = ( (None, { 'classes': ('wide',), 'fields': ('email', 'username', 'password1', 'password2', 'is_staff', 'is_active', 'groups'), }), ) # 其他自定义配置,比如列表显示项 list_display = ('email', 'username', 'is_staff') search_fields = ('email', 'username') ordering = ('email',) admin.site.register(CustomUser, CustomUserAdmin)
3. 确认settings.py配置
确保AUTH_USER_MODEL指向你的自定义用户:
AUTH_USER_MODEL = '你的应用名.CustomUser'
4. 更新数据库
修改模型后执行迁移:
python manage.py makemigrations python manage.py migrate
注:如果项目已有数据,建议先备份再操作,避免数据丢失。
内容的提问来源于stack exchange,提问作者Zembla
相关产品推荐
相关产品推荐

