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

如何解决Django执行migrate时报ValueError: Field 'cid' expected a number but got ''

错误根源

Django的迁移文件是按生成顺序链式执行的,即使你后续修改了模型、生成了新的迁移文件,执行migrate时仍会从最早未执行的历史迁移开始跑。你旧迁移文件0003_auto_20211009_2038中存在非法操作:给数值类型的AutoField字段cid设置了空字符串''作为默认值,类型不匹配导致迁移执行到该步骤时直接抛出错误,根本无法运行到后续你修改主键为email的新迁移,所以即使你现在的模型里已经没有cid字段,还是会报错。

修复方案

根据你当前的环境选择对应方案即可:

开发环境(无重要数据)

  • 删除当前app下migrations文件夹内的所有历史迁移文件,仅保留__init__.py
  • 清空数据库django_migrations表中对应当前app的所有迁移记录,也可直接删除开发数据库重建
  • 执行python manage.py makemigrations生成全新的迁移文件,新文件中不会再出现给cid设置空默认值的非法操作
  • 执行python manage.py migrate即可完成迁移

生产/有重要数据的环境

  • 定位到报错的旧迁移文件0003_auto_20211009_2038.py,找到添加cid字段的代码行
  • 将该行中的default=''参数修改为数值类型合法值,比如default=1;如果cid是AutoField主键,本身不需要手动设置默认值,直接删除default参数即可
  • 同步检查后续迁移文件中是否存在其他操作cid字段的非法逻辑,如有一并修正
  • 重新执行python manage.py migrate即可正常跑完所有迁移

注意:操作前请先备份全量数据库,避免数据丢失。

内容的提问来源于stack exchange,提问作者Ashwin Behera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:45:06