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

如何扩展Django auth用户管理器添加自定义方法并保留原有内置方法

Django自定义Auth用户模型保留内置方法的实现方案

错误根因

你自定义的用户管理器继承了基础的models.Manager类,没有继承Django Auth模块自带的UserManager,因此丢失了create_user、create_superuser等所有内置用户操作方法。同时你的代码还存在额外问题:

  • 缺失uuid模块导入
  • 自定义管理器类名拼写错误
  • 自定义查询方法内硬编码了模型类,不符合管理器编写规范
  • 未在settings.py中声明AUTH_USER_MODEL指定自定义用户模型,属于Django扩展用户模型的必填遗漏配置

正确实现步骤

  • 自定义用户管理器继承django.contrib.auth.models.UserManager
  • 修复代码中的拼写、导入、查询逻辑问题
  • 追加AUTH_USER_MODEL配置
  • 重新生成数据库迁移并执行

完整代码

models/custom_user.py

import uuid
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models


class CustomUserManager(UserManager):
    def get_active_users(self):
        # 内部查询使用self指代当前管理器绑定的模型,避免硬编码
        return list(self.filter(is_active=True))
        

class CustomUser(AbstractUser):
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    objects = CustomUserManager()

settings.py追加配置

# 声明项目使用的默认用户模型,格式为 应用名.自定义用户类名
AUTH_USER_MODEL = 'cbapp.CustomUser'

迁移执行命令

# 若之前已生成过auth相关迁移,需先删除旧迁移文件、清空数据库后再执行以下命令
python manage.py makemigrations
python manage.py migrate

功能验证

修改完成后,内置方法和自定义方法可同时正常调用:

# 内置创建用户方法正常可用
user = CustomUser.objects.create_user('Dave', 'myemail@test.com', 'johnpassword')
# 自定义查询方法正常可用
active_users = CustomUser.objects.get_active_users()

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:02