Я хочу переместить поле гудок и его данные из одной модели в другую, используя Юг:
class Foo(models.Model):
foofield = models.CharField()
honk = models.PositiveIntegerField()
class Bar(models.Model):
barfield = models.CharField()
Я делал это раньше, используя 3 отдельные миграции:
- Миграция схемы, добавление сигнала в Bar
- Миграция данных, копирование всех данных Foo.honk в Bar.honk.
- Еще одна миграция схемы, удаление сигнала от Foo
Могу ли я выполнить эти три шага за одну миграцию?
Я уже узнал, что не так много разница между миграцией схемы и данных в South, поэтому я подумал, что, возможно, что-то вроде этого может сработать (это три миграции выше, просто объединенные в одну):
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 and then ...
bar.honk = foo.honk
bar.save()
# remove old column
db.delete_column('myapp_foo', 'honk')
Будет ли это работать или не получится, потому что моя (южная замороженная) orm еще не знает о Bar.honk? Или я делаю это неправильно, и есть лучший способ сделать это за одну миграцию?