You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 重新执行迁移操作

  1. 无需删除原有迁移文件,直接执行:
python manage.py makemigrations your_app_name
  1. 然后执行伪初始化迁移:
python manage.py migrate --fake-initial

--fake-initial会告知Django这些表已存在,无需重新创建。

额外说明

测试数据库创建时,Django会严格按照迁移依赖顺序创建表,调整依赖后sessions的表会先被创建,GeSession的外键就能找到对应表,报错即可解决。移除关联后能正常创建,也验证了问题根源是外键依赖顺序,和单库/多库无关。

内容的提问来源于stack exchange,提问作者Marchesi Gabriele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:22:04