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

Django执行migrate迁移报错:id字段期望数字但得到'shafquetnaghmi'

问题根因

你在models.py里移除sender字段错误默认值的修改仅更新了模型层代码,之前给sender设置default='shafquetnaghmi'时Django自动生成的迁移文件没有同步更新——报错里提到的socialapp.0006_remove_instantmessage_sender_instantmessage_sender迁移文件内部,仍然硬编码了这个字符串默认值。迁移执行时会尝试将该字符串作为外键关联的User表ID写入数据库,而外键字段要求存储整数类型的主键ID,因此触发类型不匹配错误。

解决方法

根据迁移文件的同步状态选对应方案即可:

  • 方案1:直接修改出错的迁移文件(适合该迁移已经在其他环境执行过、不能随便删除的场景)
    1. 打开路径socialapp/migrations/0006_remove_instantmessage_sender_instantmessage_sender.py
    2. 在迁移操作的字段定义部分,找到sender字段配置里的default='shafquetnaghmi'代码,直接删除这行,或者替换为default=None(匹配你字段配置里null=True的设定)
    3. 保存文件后重新执行python manage.py migrate即可正常完成迁移。
  • 方案2:删除错误迁移文件重建(适合这个0006迁移还没同步到生产/其他协作成员本地的开发场景)
    1. 删除socialapp/migrations/目录下的0006_remove_instantmessage_sender_instantmessage_sender.py文件,同时清理socialapp/migrations/__pycache__目录下对应编号的.pyc缓存文件
    2. 确认models.py里instantmessage模型的sender字段配置为你需要的最终状态(即你贴出的无default的代码)
    3. 重新执行python manage.py makemigrations生成正确的迁移文件
    4. 执行python manage.py migrate完成迁移即可。
额外排查项

如果上述操作后仍报相同错误,检查两处代码:

  1. 是否在模型层外给ForeignKey字段配置过返回字符串的全局默认值
  2. 是否在instantmessage模型的save()方法、或者任何pre_save信号处理逻辑里,硬编码给sender字段赋值了'shafquetnaghmi'字符串

内容的提问来源于stack exchange,提问作者shafquet Naghmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:36:16