遗留Django应用缺失迁移文件,执行migrate/makemigrations报错求助
问题解决思路
一、解决__support类导致的迁移错误
你碰到的_Migration__support错误是Python**名称修饰(name mangling)**机制引发的:
- 你在models.py里定义的
class __support:,因为类名以双下划线开头,Python会自动对其名称做修改,格式变成_<外层类名>__support。但迁移文件里写的AFATdashboard.models.__support,在Migration类的上下文里会被解析成_Migration__support,自然找不到对应属性。
修复步骤:
- 把models.py里的
__support改成非双下划线开头的名称,比如_Support或者BaseSupport(support不是Python关键字,问题根源是双下划线触发的名称修饰) - 删除自动生成的
0001_initial.py迁移文件 - 重新执行
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 - 这么大的数值既无业务必要,也会导致数据库无法创建字段,后续迁移必然失败
修复步骤:
- 打开models.py,把所有这类DecimalField的参数改成符合业务需求的合理值,示例:
# 若为金额类字段,可调整为 models.DecimalField(blank=True, db_column='costoCorpoIdrico2227', max_digits=20, decimal_places=2, null=True) - 确保
decimal_places小于等于max_digits,且数值不超过你使用的数据库的Decimal类型限制 - 重新生成迁移文件并执行迁移
内容的提问来源于stack exchange,提问作者Filippo
相关产品推荐
相关产品推荐

