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

遗留Django应用缺失迁移文件,执行migrate/makemigrations报错求助

问题解决思路

一、解决__support类导致的迁移错误

你碰到的_Migration__support错误是Python**名称修饰(name mangling)**机制引发的:

  • 你在models.py里定义的class __support:,因为类名以双下划线开头,Python会自动对其名称做修改,格式变成_<外层类名>__support。但迁移文件里写的AFATdashboard.models.__support,在Migration类的上下文里会被解析成_Migration__support,自然找不到对应属性。

修复步骤:

  1. 把models.py里的__support改成非双下划线开头的名称,比如_Support或者BaseSupport(support不是Python关键字,问题根源是双下划线触发的名称修饰)
  2. 删除自动生成的0001_initial.py迁移文件
  3. 重新执行python manage.py makemigrations生成正确的迁移文件,此时bases里会引用修改后的类名,不会再出现名称解析错误

二、修复DecimalField参数超出范围的问题

decimal_places=65535, max_digits=65535完全不符合Django和数据库的限制:

  • Django对DecimalField的max_digits没有硬限制,但底层数据库有明确上限(比如PostgreSQL最大支持1000位,MySQL最大是65),且decimal_places不能大于max_digits
  • 这么大的数值既无业务必要,也会导致数据库无法创建字段,后续迁移必然失败

修复步骤:

  1. 打开models.py,把所有这类DecimalField的参数改成符合业务需求的合理值,示例:
    # 若为金额类字段,可调整为
    models.DecimalField(blank=True, db_column='costoCorpoIdrico2227', max_digits=20, decimal_places=2, null=True)
    
  2. 确保decimal_places小于等于max_digits,且数值不超过你使用的数据库的Decimal类型限制
  3. 重新生成迁移文件并执行迁移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:50:07