Dokku部署Django自定义用户模型报错accounts_customuser关系不存在
错误根因
- 你将迁移文件加入了
.gitignore规则,本地生成的accounts应用初始迁移文件没有被推送到Dokku远端,部署时无法执行建表操作生成accounts_customuser表,但auth系统、其他关联用户表的应用迁移都依赖该表的存在,因此执行迁移时抛出表不存在的错误。 - 替换默认
AUTH_USER_MODEL为自定义模型后,Django要求自定义用户模型的迁移优先级高于auth相关迁移,缺少对应迁移文件的情况下,迁移执行顺序也会触发该错误。
关于
migrate --fake的风险 该操作只会在数据库的迁移记录表中标记迁移已完成,不会实际执行SQL修改表结构。你当前的问题是accounts_customuser表根本未创建,使用--fake只会让Django误以为迁移执行成功,后续所有涉及用户表的操作都会持续报错,还会打乱迁移记录的顺序,额外增加修复成本,完全不适合当前场景。
修复步骤
- 调整
.gitignore规则,删除全局忽略迁移文件的配置,仅忽略迁移目录下的缓存文件:
删掉.gitignore中类似*/migrations/*的规则,新增*/migrations/__pycache__/即可,Django官方要求正式项目的迁移文件必须提交到版本库同步所有环境。 - 本地生成干净的迁移文件:
可以先清空本地开发库的迁移记录,或者新建临时空白测试库,执行python manage.py makemigrations,确认accounts/migrations目录下生成了包含CustomUser建表逻辑的0001_initial.py文件。 - 提交迁移文件到Git仓库:
执行git add .、git commit -m "add all migration files"提交所有新增的迁移文件。 - 清理Dokku端的脏数据:
- 如果是首次部署无生产数据,直接执行
dokku postgres:reset <你的应用绑定的数据库服务名>重置数据库即可。 - 如果已有生产数据,先执行
dokku postgres:export <你的应用绑定的数据库服务名> > backup.sql备份数据,再清空数据库中django_migrations表的记录、删除已创建的不完整表。
- 如果是首次部署无生产数据,直接执行
- 重新执行部署命令
git push dokku main:master即可正常完成迁移。
内容的提问来源于stack exchange,提问作者Doug Smith
相关产品推荐
相关产品推荐

