Django Abstract User迁移问题求助:删除迁移文件和数据库后仍异常
Django Abstract User迁移问题排查方案
先确认
settings.py里的用户模型配置:
必须确保AUTH_USER_MODEL = '你的应用名.自定义用户模型类名'配置准确,而且这个配置必须在项目第一次迁移前就设置好——如果是中途改的,就算删迁移删数据库也会有遗留问题。检查应用名和类名有没有拼写错误。彻底清理迁移相关文件:
- 删掉所有应用下
migrations文件夹里,除了__init__.py之外的所有.py和.pyc文件 - 删除项目根目录的数据库文件(比如
db.sqlite3,如果用的是其他数据库就清空对应库) - 执行命令
python manage.py makemigrations重新生成迁移文件,再执行python manage.py migrate完成迁移
- 删掉所有应用下
检查自定义用户模型代码:
- 确认模型正确继承
AbstractUser,不要重复定义Django内置的字段(比如要替换username的话,得用username = None再重新定义,或者设置USERNAME_FIELD为其他字段) - 新增的字段要设置好默认值或者允许为空,避免迁移时因为必填字段无值报错
- 检查
Meta类的配置,有没有和内置用户模型冲突的设置
- 确认模型正确继承
排查其他应用的依赖:
检查项目里的其他应用(包括第三方库),有没有直接引用django.contrib.auth.models.User的情况,全部改成from django.contrib.auth import get_user_model或者直接导入你的自定义用户模型,否则会导致迁移时模型不匹配用测试项目验证:
新建一个空白Django项目,直接配置自定义用户模型并执行迁移,如果能正常运行,说明原项目里有隐藏的配置或依赖问题,需要逐步排查原项目的其他代码和配置
内容的提问来源于stack exchange,提问作者Saqib Ahmad
相关产品推荐
相关产品推荐

