You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:24:30