Django自定义AbstractUser后迁移报错:users_user表不存在及关联字段异常
迁移错误解决方案
错误原因
- 旧迁移文件残留:之前用
Profile扩展默认User时生成的迁移文件未删除,迁移系统仍尝试引用已移除的users.Profile模型,且该模型的外键引用了小写的users.user,与当前自定义的users.User(大写)不匹配。 - 初始auth迁移冲突:若项目已执行过默认auth应用的迁移,更换自定义用户模型后,Django内置的
admin.LogEntry模型会引用旧用户模型,导致冲突。
解决步骤
1. 清理残留迁移文件
- 进入
users应用的migrations目录,删除所有涉及Profile模型的迁移文件(如0002_profile.py),仅保留__init__.py和创建User模型的迁移文件(如0001_initial.py)。 - 进入
posts应用的migrations目录,删除所有迁移文件,仅保留__init__.py。
2. 重置数据库(重要:先备份数据)
- 若使用SQLite,直接删除项目根目录下的
db.sqlite3文件;若使用其他数据库,清空数据库并删除django_migrations表中的所有记录。
3. 重新生成并执行迁移
在项目根目录下依次执行命令:
python manage.py makemigrations
python manage.py migrate
4. 注册自定义User到后台(可选但建议)
在users/admin.py中添加以下代码,确保自定义User模型能在Django后台正常管理:
from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User admin.site.register(User, UserAdmin)
内容的提问来源于stack exchange,提问作者nameless
相关产品推荐
相关产品推荐

