新旧Django版本主键数据类型不兼容导致外键创建失败的解决方案咨询
新旧Django版本主键数据类型不兼容导致外键创建失败的解决方案咨询
我现在遇到了数据库迁移的问题:我在Django版本大于5的新应用里,使用了一个由旧版Django 1.4创建的数据库。问题出在主键的数据类型上——旧版Django用的是AutoField,对应数据库里的int类型;而新版Django默认的主键类型是bigint。
现在我创建了一个新模型,其中包含指向旧模型的外键,结果遇到了下面的错误:
Column 'tbl1.id' is not the same data type as referencing column 'tbl2.field_id' in foreign key 'tb1_field_id_tbl2_id'
我该怎么解决这个问题呢?
目前只有给models.ForeignKey设置db_constraint=False能暂时解决,但我不想承担这个风险。
我已经尝试过这些方法,但都没成功:
- 修改
DEFAULT_AUTO_FIELD为django.db.models.AutoField - 显式把外键所在表的id设为AutoField,但这个表依赖太多,导致其他关联关系崩溃
- 显式指定
to_field="id"映射到对应字段 - 设置
db_constraint=False——能解决但不是最优方案 - 为新模型创建使用AutoField的迁移,但Django似乎仍然把外键表的类型识别为
bigint
备注:内容来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

