django.db.utils.OperationalError: (3780, "Referencing column 'sku_id' and referenced column 'id' in foreign key constraint 'tb_order_goods_sku_id_e335e3b1_fk_tb_sku_id' are incompatible.")
具体来说就是建表时 执行数据库迁移命令后报这个错 提示所创建的表中的外键与其所关联的那张表的主键类型不匹配
解决办法:
先正常执行python manage.py makemigrations和python manage.py migrate
然后去数据库可视化软件navicat里
假设刚才创建的表为A表 其中所报错的外键所关联的表为B表
找到B表-右键设计表-查看主键类型-记下来
然后找到A表-右键设计表-将报错的外键的类型改为与B表主键的类型相同-点击保存
回到pycharm 再次输入python manage.py migrate
会发现以下报错
这是因为在执行python manage.py migrate
时 django会再次创建表 而表在第一次执行python manage.py migrate就已被创建 所以其实在原则上 根本就不必再执行python manage.py migrate了 因为表已经创建好 而报错的字段也在navicat里修改好 但如果不处理这个错误 之后你再操作模型表里其他字段 然后执行数据库迁移命令的时候 还是会报这个错
解决办法:
输入python manage.py migrate --fake
这是因为使用 --fake
选项时,makemigrations
命令会生成迁移脚本,但不会实际应用它们。这可以用来处理那些在开发过程中可能会多次修改的迁移。
出现以下的样子就代表修改成功了