С этой точки зрения документации не хватает, но если вы измените замерзшую часть ORM в миграции, добавив себе пропущенное поле, тогда оно будет доступно: я имею в виду, что во время миграции на юг вы должны использоватьзаблокированный ORM , поскольку в будущем вы будете мигрировать, модель Foo
может потерять поле honk
.
Я думаю, что если вы измените заблокированное объявление ORM, как показано ниже
models = {
'app.foo': {
'Meta': {'object_name': 'Foo'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'foofield': ('django.db.models.fields.CharField', [],{'max_length':666}),
'honk': ('django.db.models.fields.PositiveIntegerField', [], {}),
},
'app.bar': {
'Meta': {'object_name': 'Bar'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'barfield': ('django.db.models.fields.CharField', [],{'max_length':666}),
'honk': ('django.db.models.fields.PositiveIntegerField', [], {}),
},
}
complete_apps = ['app']
symmetrical = True
все будет работать:)
Хитрость заключается в определении поля honk
в каждой модели, очевидно, должен присутствовать столбец в базе данных
class Migration(DataMigration):
def forwards(self, orm):
# add column
db.add_column('myapp_bar', 'honk', self.gf('django.db.models.fields.PositiveIntegerField')(default='0'), keep_default=False)
# copy data
for foo in Foo.objects.all():
# find the right bar here
bar = orm.Bar.objects.get(**whatever)
bar.honk = foo.honk
bar.save()
# remove old column
db.delete_column('myapp_foo', 'honk')
PS: как указано @ acjohnson55 symmetrical = True
действительно важно