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

Django跨App导入自定义用户模型CustomUser报错如何解决?

错误原因

你的报错核心是使用字符串形式的懒模型引用时,Django默认会从当前模型所属的应用(也就是company_accounts)查找目标模型,而你的CustomUser定义在accounts应用下,因此找不到对应模型。

修复步骤

  1. 先确认全局配置(必做)
    自定义用户模型必须先在项目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
  1. 修改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)
    # 其余字段保持不变
  1. 清理旧迁移文件(如果之前生成过错误的迁移)
    如果修改前已经为company_accounts应用生成过迁移文件,需要先删除company_accounts/migrations/目录下除了__init__.py之外的所有文件,再重新执行迁移命令:
python manage.py makemigrations
python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:15:04