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

Django迁移回滚疑问:操作是否会按照逆序执行?

Django迁移回滚操作顺序说明

核心结论

Django回滚迁移时会严格按照操作定义的逆序执行,你示例中的RunPython操作确实会最后执行回滚逻辑。

执行顺序对比

你给出的迁移操作列表如下:

operations = [
    migrations.RunPython(migrate_forward, reverse_code=migrate_backward),
    migrations.AlterField(...),
    migrations.AddField(...),
]

正向应用迁移顺序

按列表定义顺序从上到下依次执行:

  • 第一步:执行RunPython的migrate_forward自定义逻辑
  • 第二步:执行AlterField修改目标字段属性
  • 第三步:执行AddField新增指定字段

反向回滚迁移顺序

按列表定义顺序从下到上逆序执行:

  • 第一步:回滚AddField操作,删除之前新增的字段
  • 第二步:回滚AlterField操作,将目标字段恢复到修改前的原有属性
  • 第三步:最后执行RunPython配置的reverse_code,也就是自定义的migrate_backward回滚逻辑

注意事项

  • 该逆序执行是Django迁移的内置规则,设计初衷是避免回滚时出现结构依赖错误:后执行的修改先撤销,保证回滚前序操作时,依赖的表结构和操作执行时的状态一致。
  • 如果你没有为RunPython配置reverse_code参数,Django会判定该迁移为不可回滚,执行回滚操作时会直接抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:24:03