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

Django模型迁移后字段类型不匹配与字段不存在问题求助

Django模型迁移后字段类型不匹配与字段不存在问题求助

咱们先拆解下你遇到的两个核心问题:

  1. 字段类型不匹配错误:你定义的player_catch是IntegerField,但数据库里这个字段的默认值或者已有数据是datetime类型,导致Django保存数据时拿到了datetime值,却期望是数字,所以抛出了TypeError。这完全是因为你迁移时误把datetime当成默认值输入导致的。
  2. player_run字段不存在:这个错误说明player_run字段根本没在数据库里创建成功,大概率是那次错误的迁移没正确执行,或者迁移文件的定义有问题。

下面给你两种解决思路,根据你的环境选择:

方法一:回滚迁移重新操作(推荐开发环境使用)

这种方法最干净,能彻底解决问题:

  • 第一步,查看当前的迁移记录,找到你添加那三个字段的那次迁移:
    python manage.py showmigrations
    
    找到对应app(比如你这里是dashboard)下最新的那个迁移文件,比如名字是0003_add_player_stats.py这类。
  • 第二步,回滚到这个迁移之前的版本:
    python manage.py migrate dashboard 0002_previous_migration
    
    这里的0002_previous_migration是添加字段之前的迁移编号,比如如果添加字段的是0003,就填0002。
  • 第三步,删掉那个有问题的迁移文件(就是刚才找到的添加三个字段的那个),然后重新生成迁移:
    python manage.py makemigrations
    
    这时候会再次提示你输入默认值,这次一定要输入整数,比如0,和你模型里写的default=0保持一致。
  • 第四步,执行迁移:
    python manage.py migrate
    

方法二:直接修改数据库(适合生产环境,谨慎操作)

如果是生产环境不能随便回滚迁移,那可以直接操作数据库来修正:

  1. 登录到你的数据库(比如MySQL用mysql命令,PostgreSQL用psql),找到dashboard_player表。
  2. 执行SQL语句修改字段类型和默认值:
    • 如果你用的是MySQL:
      ALTER TABLE dashboard_player MODIFY COLUMN player_run INT DEFAULT 0;
      ALTER TABLE dashboard_player MODIFY COLUMN player_wickets INT DEFAULT 0;
      ALTER TABLE dashboard_player MODIFY COLUMN player_catch INT DEFAULT 0;
      
    • 如果你用的是PostgreSQL:
      -- 先转换字段类型,再设置默认值
      ALTER TABLE dashboard_player ALTER COLUMN player_run TYPE INT USING player_run::INT;
      ALTER TABLE dashboard_player ALTER COLUMN player_run SET DEFAULT 0;
      
      ALTER TABLE dashboard_player ALTER COLUMN player_wickets TYPE INT USING player_wickets::INT;
      ALTER TABLE dashboard_player ALTER COLUMN player_wickets SET DEFAULT 0;
      
      ALTER TABLE dashboard_player ALTER COLUMN player_catch TYPE INT USING player_catch::INT;
      ALTER TABLE dashboard_player ALTER COLUMN player_catch SET DEFAULT 0;
      
    注意:如果字段里已经存了datetime类型的数据,得先把这些数据改成整数(比如0)再执行上面的语句,不然会转换失败。

另外,你可以检查下Django的迁移文件,确保里面的三个字段定义和你的模型一致,都是IntegerField且默认值为0,避免后续再出问题。

备注:内容来源于stack exchange,提问作者Aalok karn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:09:34