The doc说:
当您运行迁移时,Django正在使用模型的历史版本存储在迁移文件中。
但我无法在那里看到他们。我使用RunPython
操作进行数据迁移,但也没有历史模型。可能是Django在飞行中生成它们吗?它是如何做到的?
虽然我们正在努力,但请确认一下我是否理解正确。历史模型是编写迁移时的模型吗?除了一些限制,比如没有自定义方法。
答案 0 :(得分:1)
每当您创建模型并运行makemigrations
时。 Django为该模型创建一个迁移文件,表示创建此类模型。
operations = [
migrations.CreateModel(
name='Book',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
],
)
]
当您编辑该模型(如添加字段并再次运行makemigrations
)时,会为该更改创建新的迁移文件。这是Django存储该模型的历史的方式。
operations = [
migrations.AddField(
model_name='book',
name='author',
field=models.CharField(blank=True, max_length=50, null=True),
),
]
迁移文件是历史模型。
现在,当您在迁移中添加一些带有RunPython
的自定义Python代码时,它将成为未来迁移的历史背景的一部分。
迁移文件是一组需要在模型的数据库上完成的操作。他们没有像save()
方法那样定制模型,因为这个模型是根据历史记录创建的,即迁移文件。