Django跨App导入自定义用户模型CustomUser报错如何解决?
错误原因
你的报错核心是使用字符串形式的懒模型引用时,Django默认会从当前模型所属的应用(也就是company_accounts)查找目标模型,而你的CustomUser定义在accounts应用下,因此找不到对应模型。
修复步骤
- 先确认全局配置(必做)
自定义用户模型必须先在项目settings.py中声明,否则Django会默认使用内置用户模型,也会触发关联报错:
# 项目settings.py中添加配置 AUTH_USER_MODEL = 'accounts.CustomUser'
同时检查你accounts/models.py里的CustomUser有没有正确导入AbstractUser,你当前贴的代码里缺失该导入语句:
# accounts/models.py 头部补充导入 from django.contrib.auth.models import AbstractUser
- 修改Tenant模型的外键引用,三种方案选一种即可,优先推荐第一种
- 方案1(官方推荐):使用
settings.AUTH_USER_MODEL引用用户模型,后续如果更换用户模型无需批量修改所有关联字段
# 先导入settings from django.conf import settings class Tenant(TenantMixin): # 把原来的外键改成如下写法 user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True) # 其余字段保持不变
- 方案2:补全懒引用的应用前缀,明确指定去
accounts应用找模型
class Tenant(TenantMixin): # 加上应用名前缀 user = models.ForeignKey('accounts.CustomUser', on_delete=models.SET_NULL, null=True) # 其余字段保持不变
- 方案3:直接使用你已经导入的
CustomUser类
# 你已经写了from accounts.models import CustomUser,直接用即可 class Tenant(TenantMixin): user = models.ForeignKey(CustomUser, on_delete=models.SET_NULL, null=True) # 其余字段保持不变
- 清理旧迁移文件(如果之前生成过错误的迁移)
如果修改前已经为company_accounts应用生成过迁移文件,需要先删除company_accounts/migrations/目录下除了__init__.py之外的所有文件,再重新执行迁移命令:
python manage.py makemigrations python manage.py migrate
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

