(八)迁移记录与现有数据变化
1. 当前模型与变化步骤分别保存
models.py 表达当前结构;迁移文件表达从已有结构走到这里的步骤。makemigrations 对比模型与迁移状态,生成 Python 变化记录;migrate 按依赖顺序把尚未应用的步骤执行到数据库。
配套 0001_initial.py 创建书籍、标签、关联和修改记录;0002_book_notes.py 随后添加备注字段:
# 项目文件:reading_project/src/library/migrations/0002_book_notes.py
# Generated by Django 5.2.18 on 2026-10-20 07:51
from django.db import migrations, models
class Migration(migrations.Migration):
# 先应用初始结构,再给已有记录补上初始为空的备注列。
dependencies = [
("library", "0001_initial"),
]
operations = [
migrations.AddField(
model_name="book",
name="notes",
field=models.TextField(
blank=True, default="", max_length=2000, verbose_name="阅读备注"
),
),
]dependencies 要求先应用 0001,AddField 描述本次列变化。完整初始文件见 0001_initial.py。它们与代码一起保存,数据库的 django_migrations 表记录哪些步骤已经执行。
# 查看已应用与未应用的迁移,以及某一步准备执行的 SQL。
uv run python manage.py showmigrations library
uv run python manage.py sqlmigrate library 0002
# 应用所有缺少的迁移。
uv run python manage.py migrate
2. 给迁移前的书补上备注列
migration_steps.py 在临时文件先应用 0001,保存“迁移前的书”,再应用 0002。输出先是 0001 有 notes 列 False,随后原编号与书名保留,备注为 ''。
新增字段后生成并检查迁移,再将其应用到数据文件;已经分享或应用的迁移继续保留,用下一份迁移记录后续变化。相关机制可查 Django 迁移。