Перенос данных из одной модели в другую с помощью 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.