Django执行migrate报错relation auth_user不存在 表创建失败问题求助
Django自定义User模型迁移报错排查方案
核心问题排查方向
- 模型app_label配置不匹配:你提供的User模型Meta中明确设置了
app_label = 'admin_portal',如果你的这个模型实际放在app1目录下,Django会将该模型的迁移生成到admin_portal应用的migrations目录,而非app1目录,你执行migrate app1自然找不到对应迁移文件。 - 迁移执行顺序错误:app2的迁移依赖自定义User表,但运行全局migrate时app2的迁移先于User模型所属应用的迁移执行,导致找不到
auth_user表。 - 迁移记录冲突:之前的错误迁移操作已经在
django_migrations系统表中写入了app1的迁移记录,导致Django判定没有需要执行的迁移,但是实际数据库中没有创建对应表。
具体解决步骤
- 第一步:修正配置对齐
确认settings.py中AUTH_USER_MODEL参数与User模型的app_label保持一致:- 如果你希望该User模型归属app1:直接删除User模型Meta中的
app_label = 'admin_portal'行,将AUTH_USER_MODEL设置为app1.User - 如果你希望该User模型归属admin_portal:将
AUTH_USER_MODEL设置为admin_portal.User
- 如果你希望该User模型归属app1:直接删除User模型Meta中的
- 第二步:清理历史错误内容
- 删除app1、app2、admin_portal三个应用下migrations目录中除
__init__.py之外的所有文件 - 开发环境无重要数据可直接删除项目数据库重建;有数据的话连接数据库清空
django_migrations系统表的所有记录
- 删除app1、app2、admin_portal三个应用下migrations目录中除
- 第三步:重新生成迁移文件
执行python3 manage.py makemigrations,确认User模型对应的迁移文件生成在你配置的归属应用的migrations目录下 - 第四步:按顺序执行迁移
先执行User模型归属应用的迁移:
执行成功后再运行全局迁移完成剩余应用的迁移:python3 manage.py migrate <User归属应用名>python3 manage.py migrate
额外检查项
如果app2的模型存在外键、多对多等关联User模型的字段,打开app2的迁移文件,确认其dependencies配置项中已经添加了User归属应用的初始迁移依赖,示例如下:
dependencies = [ ('<User归属应用名>', '0001_initial'), ]
如果没有该依赖手动添加即可,避免后续迁移顺序混乱。
内容的提问来源于stack exchange,提问作者azteker
相关产品推荐
相关产品推荐

