首先,自动生成迁移python manage.py schemamigration myapp --auto
。
然后在迁移文件中找到类似以下的内容(大概是myapp/migrations/00xx_auto__add__ranking.py
):
def forwards(self, orm):
# Adding model 'Ranking'
db.create_table(u'myapp_ranking', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('person', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['myapp.Person'])),
('score', self.gf('django.db.models.fields.IntegerField')(default=100)),
('date_created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
))
db.send_create_signal(u'myapp', ['Ranking'])
在此之后,插入如下内容:
# Create 'blank' Ranking entries for all extant Person objects
for person in orm.Person.objects.all():
orm.Ranking.objects.create(person=person)
其他方法包括将其拆分为三个迁移(如果您在生产环境中有大型数据集,则最好这样说):
- 添加模型,不需要 person 字段
- 添加一个单独的数据迁移 (
python manage.py datamigration myapp
),并在其中插入代码以执行我上面建议的操作。
- 运行上面的两个迁移(如果需要,允许这需要一些时间)
- 将 person 字段更改为全部填充后,然后运行此最终迁移
南方文档有一些类似的东西。这里还有一个类似的问题可能会提供见解。