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

Django外键报错“question_question”引用“question_subject”不匹配如何解决

Django外键不匹配报错解决方案

问题根因

该报错的核心原因是Question表中subject外键字段的类型,与关联的Subject表主键类型不匹配:

  • 你自定义了Subject模型的主键为name(字符串类型,长度255),如果修改主键定义前已经生成过迁移、创建过数据库表,Question表的subject外键字段仍会保留之前关联Subject默认整数id的类型,两类字段类型不一致就会触发外键校验失败。
  • 也有可能是数据库中Question表已存储的subject外键值,在Subject表的name字段中没有对应记录,触发外键约束。

开发环境解决方法(无重要生产数据时推荐)

  • 清空对应App的历史迁移文件:保留App下migrations文件夹中的__init__.py,删除其余所有迁移文件
  • 删除开发环境的数据库文件(如sqlite的db.sqlite3),或者手动清空该App相关的所有数据库表
  • 重新生成迁移并执行:
python manage.py makemigrations
python manage.py migrate

生产环境解决方法(不可清空数据时使用)

  • 先手动查看数据库表结构:确认question_question表的subject_id字段类型、长度,和question_subject表主键name的类型、长度完全一致,均为varchar(255),如果不一致手动修改subject_id字段属性
  • 校验question_question表中所有subject_id字段的非空值,都能在question_subject表的name字段中找到对应记录,删除或修正无效的外键值
  • 重新执行迁移即可

内容的提问来源于stack exchange,提问作者amirhossein delkhosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:05