Могу ли я объединить схемы и данных (Юг) в одну?

Я хочу переместить поле honk и его данные из одной модели в другую, используя Юг:

class Foo(models.Model):
    foofield = models.CharField()
    honk = models.PositiveIntegerField()

class Bar(models.Model):
    barfield = models.CharField()

Я делал это раньше, используя 3 отдельных миграции :

  1. Перенос схемы, добавление гудка в Бар
  2. Перенос данных, копирование всех данных Foo.honk в Bar.honk
  3. Еще одна миграция схемы, удаление гудка из Foo

Могу ли я выполнить эти три шага за одну миграцию?

Я уже узнал, что не так уж много разница между схемой и миграциями данных на юге , поэтому я решил возможно, что-то вроде этого может сработать (это три приведенных выше миграции, просто преобразованные в одну):

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 пока что? Или я делаю это неправильно, и есть лучший способ сделать это за одну миграцию?

14
задан Community 23 May 2017 в 12:07
поделиться