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

Django报错:AUTH_USER_MODEL指向未安装的accounts.User模型求解决

Django AUTH_USER_MODEL 配置错误排查方案

核心问题排查步骤

  • 确认accounts应用已注册
    检查settings.py的INSTALLED_APPS列表中是否包含'accounts',注意拼写和大小写必须完全匹配:

    INSTALLED_APPS = [
        'accounts',  # 必须存在,位置无强制要求
        'django.contrib.admin',
        'django.contrib.auth',
        # 其他应用...
    ]
    
  • 修正自定义User模型的继承关系
    你提到继承了PermissionRequiredMixin,这是错误的——这个Mixin是给视图类用的,自定义用户模型应该继承PermissionsMixin(用于权限管理),正确的继承结构示例:

    from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
    from django.db import models
    
    class UserManager(BaseUserManager):
        def create_user(self, email, password=None, **extra_fields):
            if not email:
                raise ValueError('The Email field must be set')
            email = self.normalize_email(email)
            user = self.model(email=email, **extra_fields)
            user.set_password(password)
            user.save(using=self._db)
            return user
    
        def create_superuser(self, email, password=None, **extra_fields):
            extra_fields.setdefault('is_staff', True)
            extra_fields.setdefault('is_superuser', True)
            return self.create_user(email, password, **extra_fields)
    
    class User(AbstractBaseUser, PermissionsMixin):
        email = models.EmailField(unique=True)
        username = models.CharField(max_length=30, unique=True)
        is_active = models.BooleanField(default=True)
        is_staff = models.BooleanField(default=False)
    
        objects = UserManager()
        USERNAME_FIELD = 'email'  # 指定登录用的唯一字段
        REQUIRED_FIELDS = ['username']  # 创建超级用户时必填的额外字段
    
  • 重新生成并执行迁移
    如果是新项目,先确保accounts应用的迁移文件正确生成:

    python manage.py makemigrations accounts
    python manage.py migrate
    

    注意:如果是项目启动后中途修改AUTH_USER_MODEL,Django不支持这种操作,必须清空数据库或从项目初始化阶段就配置好AUTH_USER_MODEL。

  • 检查Admin注册配置
    在accounts/admin.py中正确注册自定义User模型,可直接复用Django自带的UserAdmin:

    from django.contrib import admin
    from django.contrib.auth.admin import UserAdmin
    from .models import User
    
    admin.site.register(User, UserAdmin)
    

    若自定义了模型字段,需重写UserAdmin的fieldsets和add_fieldsets来匹配你的字段配置。

  • 避免循环导入与错误引用
    在其他应用中引用用户模型时,不要直接导入accounts.models.User,而是使用Django提供的标准方法:

    from django.contrib.auth import get_user_model
    
    User = get_user_model()
    

    或者在模型外键中使用字符串引用:

    from django.db import models
    
    class SomeModel(models.Model):
        user = models.ForeignKey('accounts.User', on_delete=models.CASCADE)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:22:25