Django创建自定义邮箱登录用户模型时提示users.CustomUser未安装如何解决
问题原因
两个核心错误导致启动失败:
- 你在settings.py中配置了
AUTH_USER_MODEL = 'users.CustomUser',但INSTALLED_APPS列表中未注册users应用,且你提供的CustomUser模型实际写在main应用的models.py中,配置的应用名和模型实际所属应用不匹配。 CustomUser类中USERNAME_FIELD赋值错误,需要传入字段名的字符串格式,不能直接引用字段变量。
修复步骤
步骤1:修正应用注册与AUTH_USER_MODEL配置
二选一即可,根据你的项目规划选择:
- 方案1:CustomUser放在现有main应用下
直接修改settings.py的AUTH_USER_MODEL配置:AUTH_USER_MODEL = 'main.CustomUser' - 方案2:单独用users应用存放用户模型
- 执行命令创建users应用:
python manage.py startapp users - 把main/models.py中的CustomUser、CustomUserManager代码移动到users/models.py中
- 在INSTALLED_APPS列表中新增
'users',修改后示例:
INSTALLED_APPS = [ 'rest_framework', 'main', 'users', # 新增此行 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] - 执行命令创建users应用:
步骤2:修正CustomUser类配置
找到CustomUser类,修改USERNAME_FIELD的赋值为字符串格式:
class CustomUser(AbstractUser): username = None email = models.EmailField(_('email address'), unique=True) USERNAME_FIELD = 'email' # 加引号,传入字段名字符串 REQUIRED_FIELDS = [] objects = CustomUserManager()
步骤3:执行数据库迁移
如果此前未执行过auth相关迁移,直接运行以下命令即可:
python manage.py makemigrations python manage.py migrate
如果已经执行过旧的auth迁移,需要先清空数据库,删除所有应用migrations目录下除__init__.py之外的文件,再执行上述迁移命令。
内容的提问来源于stack exchange,提问作者Ghazi
相关产品推荐
相关产品推荐

