Django4.04扩展AbstractUser迁移提示users_user关系不存在报错
问题根因
relation "users_user" does not exist是自定义用户模型场景下的典型报错,本质是Django迁移流程没有正确生成自定义User模型对应的数据表。你之前删除迁移文件没有解决问题,是因为没有同步清理数据库里的残留表结构和迁移记录。
修复操作步骤
按顺序执行以下操作即可解决:
- 清理所有残留数据
- 删除项目根目录下的数据库文件:如果用默认SQLite就是
db.sqlite3,如果用MySQL/PostgreSQL就直接删除原有库、新建一个同名空库 - 进入项目所有app的
migrations目录,仅保留__init__.py文件,删除其余所有编号开头的迁移文件(比如0001_initial.py、0002_xxx.py这类)
- 删除项目根目录下的数据库文件:如果用默认SQLite就是
- 校验配置正确性
打开settings.py确认两个配置:- 自定义用户模型所在的
usersapp已经添加到INSTALLED_APPS列表中 AUTH_USER_MODEL = 'users.User'配置正确,没有拼写错误
额外说明:你form.py里的from attr import field是冗余无效导入,可以直接删掉,不影响功能。
- 自定义用户模型所在的
- 按正确顺序执行迁移
先单独为用户所在app生成初始迁移文件:
再执行全量迁移:python manage.py makemigrations users
迁移执行完成后,数据库里就会正常生成python manage.py migrateusers_user表,此时再执行createsuperuser、正常使用用户相关功能都不会再报这个错。
注意事项
- Django自定义用户模型有严格限制:必须在项目第一次执行
migrate命令之前就完成AUTH_USER_MODEL配置,如果已经跑过默认auth的初始迁移再改自定义用户模型,就必须按上面的清库步骤重来,Django不支持迁移中途替换用户模型。 - 后续如果要给User模型增减字段,正常执行
makemigrations和migrate即可,不需要重复清库。
内容的提问来源于stack exchange,提问作者Speedster
相关产品推荐
相关产品推荐

