Django CodeGeex 自动生成迁移文件实战教程
先明确几个关键点。CodeGeeX 确实能提升开发效率,但它不会主动介入 Django 的迁移流程,更不可能帮你自动执行 makemigrations 或 migrate 命令。它的实际价值在于辅助编写模型定义、生成迁移注释、补全 RunPython 逻辑或填充空迁移的 operations 列表——所有产出都必须经过你的人工核查、导入和微调,最终由 Django 负责执行。
换句话说,要让 CodeGeeX 参与 Django 项目中的模型层迁移文件生成,你得先接受一个前提:它本身不会直接集成到 makemigrations 流程里,既不会自动触发或监听模型变更,也不会自行向 migrations/ 目录写入文件。你实际能做的是利用它辅助编写模型定义、预判迁移行为、生成迁移逻辑描述,或者补全迁移文件中的 Python 操作代码——所有这些成果,都需要你手动校对、粘贴、调整后,再交给 Django 去执行。
确认模型变更后再让 CodeGeeX 辅助生成迁移描述
先在 models.py 里完成字段的增删改操作,比如新增一个非空的 email 字段,然后保存文件。这一步绝对不能跳过——【CodeGeeX 不会读取你的 models.py 文件,也不会主动检测变更】。Django 的 makemigrations 依赖的是当前磁盘上 models.py 的真实状态,而不是 AI 的推测。
接着,打开 CodeGeeX 编辑器或 IDE 插件,输入提示词:“根据以下 Django 模型变更,生成一段可用于迁移文件注释的中文说明:User 模型新增 email 字段,类型为 EmailField,blank=False,null=False”。它会返回一段结构清晰、直接可用的描述文本。你复制进去,放进自定义迁移文件的 docstring 即可。这个操作非常直观。
用 CodeGeeX 补全 RunPython 迁移中的数据处理逻辑
方法一:生成初始化填充脚本。假如你需要为已有数据批量设置新字段值,比如给全部 User 补充一个默认邮箱,就在 CodeGeeX 里输入:“用 Django ORM 写一个 forwards 函数,接收 apps 和 schema_editor 参数,获取旧版 User 模型,遍历所有实例,为 email 字段赋值 'user{pk}@example.com',最后调用 save()”。它输出的代码,你需要人工核实:是否包含了 .save() 调用,有没有漏掉 bulk_update 这类性能优化点。
方法二:反向迁移逻辑生成。如果需要编写 reverse 函数,把刚填入的数据清空,提示词可以改成:“生成对应的 reverse 函数,将所有 User.email 设为空字符串,并调用 save()”。这里有个常见陷阱:CodeGeeX 无法判断你是否启用了数据库事务,也不知道你是否允许空值。【生成的 reverse 代码如果没有校验字段 null=True,运行时会直接抛出 IntegrityError】。
手动生成空迁移并用 CodeGeeX 填充 operations
第一步:执行 python manage.py makemigrations myapp --empty,生成一个空的迁移文件,比如 0003_custom_init.py。
第二步:打开这个文件,在 operations = [] 中删除 pass,把光标放在方括号内。
第三步:在 CodeGeeX 里输入:“生成一个 migrations.AlterField 操作,将 myapp.User 的 username 字段 max_length 从 30 改为 150”。它会返回完整的 Python 对象代码。
第四步:把这段代码复制粘贴到 operations 列表中。务必确认已经导入了 migrations 和 models 模块——CodeGeeX 通常不会自动补全 import 行,遗漏的话,migrate 会报 ImportError。
这一步操作很直接,只需将生成的 operation 对象塞进列表即可。但特别要注意:AlterField 必须严格匹配模型中字段的当前名称和类型。AI 可能误读注释或旧的迁移记录,导致生成的 operation 与实际模型不一致。最终检查必须由你亲自完成。
