Django执行migrate报1824错误无法打开引用表classroom_user怎么办?
你遇到的报错核心是Django内置admin应用的迁移执行顺序早于你的自定义classroom应用迁移,admin表需要关联你自定义的用户表classroom_user,但迁移执行到admin的时候你的自定义用户表还未创建,因此触发外键引用失败。
解决步骤
- 首先清空生产环境的MySQL数据库,同时清理项目所有应用migrations目录下除
__init__.py外的所有文件,如果之前删除了整个migrations文件夹,需要手动重建文件夹并新增空的__init__.py文件。 - 检查项目
settings.py的配置:- 确认
AUTH_USER_MODEL配置正确,格式为AUTH_USER_MODEL = "classroom.User",无应用名、模型名拼写错误 - 调整
INSTALLED_APPS的顺序,将你的自定义应用classroom放在django.contrib.admin之前,确保Django优先执行自定义应用的迁移
- 确认
- 重新生成迁移文件,先执行指定应用的迁移生成命令:
确认输出包含classroom应用的迁移生成记录后,再执行全局迁移生成:python manage.py makemigrations classroompython manage.py makemigrations - 最后执行迁移操作:
python manage.py migrate
如果执行后仍报错,需额外排查MySQL大小写敏感问题:Linux环境下MySQL默认表名大小写敏感,Windows开发环境默认不敏感,可在MySQL配置文件中添加lower_case_table_names = 1(需重启数据库生效,新数据库可直接配置,已有数据库需备份后重新初始化)。
内容的提问来源于stack exchange,提问作者Matthew Tomsho
相关产品推荐
相关产品推荐

