Перенос данных из одной модели в другую с помощью Django South

в настоящее время у меня есть структура, которую нужно переписать, чтобы справиться с Django-CMS

В настоящее время настройка выглядит следующим образом

class Video(models.Model):        
    #embed_code_or_url = models.CharField(max_length=2000)
    permalink = models.URLField(verify_exists=True, unique=True, max_length=255, default="http://", validators=[validate_youtube_address])
    thumbnail = models.CharField(max_length=500, blank=True, null=True)
    # Data
    title = models.CharField(max_length=255, blank=True)
    ...

class VideoPlugin(CMSPlugin):
    video = models.ForeignKey(Video)

когда я теперь переношу все свои поля из Video to VideoPlugin, запустите мою schemamigration, я также хотел бы передать всю информацию с видео на VideoPlugin, когда я запускаю миграцию.

есть ли у кого-нибудь пример того, как этого можно достичь?

вот начало миграции, чтобы быть запустить

class Migration(SchemaMigration):

    def forwards(self, orm):

        # Adding field 'VideoPlugin.permalink'
        db.add_column('cmsplugin_videoplugin', 'permalink', self.gf('django.db.models.fields.URLField')(default='http://', unique=True, max_length=255), keep_default=False)

        # Adding field 'VideoPlugin.thumbnail'
        db.add_column('cmsplugin_videoplugin', 'thumbnail', self.gf('django.db.models.fields.CharField')(max_length=500, null=True, blank=True), keep_default=False)

        # Adding field 'VideoPlugin.title'
        db.add_column('cmsplugin_videoplugin', 'title', self.gf('django.db.models.fields.CharField')(default='', max_length=255, blank=True), keep_default=False)

        ...

ваша помощь очень ценится

1 ответов


вы создаете datamigration:

$ python manage.py datamigration yourapp name_of_this_migration

это замораживает модели в вашем приложении. Если другое приложение(ы) участвует/участвуют в миграции, вам нужно добавить --freeze app1 --freeze app2, etc., к этой строке, чтобы включить их в свою миграцию.

это устанавливает основную структуру файла миграции для вас, но forwards и backwards миграция пусты. Это зависит от вас, чтобы определить логику, которая будет переносить данные с одного на другой. Но это работает как и все остальное в Джанго, только ты используешь Южный ОРМ. Для любой модели приложения, в которой выполняется миграция, используется orm.MyModel.objects для любого другого приложения, которое вы добавили с --freeze параметры, вы используете orm['someapp.SomeModel'].objects.

кроме этого, вы просто получаете / filter / create и т. д., объекты как обычно перемещают данные от одного к другому. Очевидно, что для переноса вперед требуется логика, которая перемещает данные туда, куда вы хотите, и обратная миграция должна иметь логику, необходимую для восстановления данных где он был изначально.

затем вы можете мигрировать вперед и назад в среде разработки, чтобы убедиться, что она работает правильно. Одно важное замечание:это только для перемещения данных. Не изменяйте и не удаляйте структуры таблиц в вашей структуре данных. Если необходимо удалить таблицы после перемещения данных. Создать schemamigration после в datamigration.