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

修复Django Wagtail中重复字段引发的迁移异常问题

修复Django Wagtail重复StreamField导致的迁移异常

现状梳理

  • 模型WhoFundsYouPage中存在两段完全重复的StreamField定义
  • 数据库中已存在该stream字段,但对应添加字段的迁移文件0014_whofundsyoupage_stream.py丢失
  • 后续迁移0016_whofundsyoupage_stream_and_more.py未处理该字段,导致迁移链阻塞
  • 注释重复字段会触发非空约束错误,全注释字段会导致站点崩溃

修复步骤(不丢失数据)

  1. 对齐模型与数据库状态
    直接在WhoFundsYouPage模型中删除重复的StreamField定义,只保留唯一的stream字段(与数据库中已存在的字段一致)。

  2. 生成空迁移填补缺失的0014记录
    因为数据库中已经有该字段,不需要修改表结构,只需要生成一个空迁移来补全迁移链:

    python manage.py makemigrations --empty 你的应用名称
    

    将生成的迁移文件重命名为0014_whofundsyoupage_stream.py,确保编号与现有迁移文件连续(比如现有最后一个迁移是0013,这个就用0014)。打开文件后,保持operations列表为空即可:

    from django.db import migrations
    
    class Migration(migrations.Migration):
        dependencies = [
            ('你的应用名称', '0013_上一个迁移的名称'),  # 替换为实际的依赖迁移名称
        ]
    
        operations = [
            # 空操作,仅用于标记该迁移已完成
        ]
    
  3. 标记0014迁移为已应用
    用--fake参数告诉Django该迁移已经在数据库中生效,无需实际执行:

    python manage.py migrate 你的应用名称 0014_whofundsyoupage_stream --fake
    
  4. 执行后续迁移
    现在迁移链已经打通,执行所有未应用的迁移:

    python manage.py migrate
    
  5. 验证修复效果
    启动服务器,尝试创建WhoFundsYouPage页面,确认非空约束错误消失,站点功能正常,原有数据未丢失。

注意事项

  • 操作前务必备份数据库,防止意外数据丢失
  • 迁移文件编号必须严格连续,避免破坏迁移链
  • 执行--fake操作时要确认对应迁移确实没有需要执行的表结构变更

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:52:38