Django测试报错1824:无法打开引用表'django_session'求助
Django测试数据库创建报错(1824)的解决方案
问题核心原因
问题出在迁移执行顺序上:你的自定义GeSession表迁移会先于Django自带的sessions应用迁移执行,而GeSession依赖django_session表,此时django_session还未创建,因此触发外键引用错误。
把Django表和业务表放在同一库完全没问题,不需要多数据库,核心是迁移顺序没处理对。
具体解决步骤
1. 调整迁移文件的依赖关系
打开你自定义应用的迁移文件(比如0001_initial.py),找到dependencies列表,手动添加对sessions应用迁移的依赖,确保Django先创建django_session表:
dependencies = [ ('sessions', '__latest__'), # 新增该行,强制先执行sessions的迁移 # 保留原有其他依赖项 ]
若不清楚
sessions的最新迁移版本,直接写('sessions',)即可,Django会自动处理依赖顺序。
2. 修正managed属性设置
- 对于遗留表(包括你手动创建的
GeSession),如果不需要Django管理其表结构生命周期,应设置managed=False,避免Django尝试重复创建这些表; - 仅在需要Django自动维护表结构的表上设置
managed=True。
3. 重新执行迁移操作
- 无需删除原有迁移文件,直接执行:
python manage.py makemigrations your_app_name
- 然后执行伪初始化迁移:
python manage.py migrate --fake-initial
--fake-initial会告知Django这些表已存在,无需重新创建。
额外说明
测试数据库创建时,Django会严格按照迁移依赖顺序创建表,调整依赖后sessions的表会先被创建,GeSession的外键就能找到对应表,报错即可解决。移除关联后能正常创建,也验证了问题根源是外键依赖顺序,和单库/多库无关。
内容的提问来源于stack exchange,提问作者Marchesi Gabriele
相关产品推荐
相关产品推荐

