Использование юга для рефакторинга модели Django с наследованием
Мне было интересно, возможна ли следующая миграция с Djangoюг и до сих пор сохраняют данные.
До:В настоящее время у меня есть два приложения, одно из которых называется TV, другое - фильмы, каждое с моделью VideoFile (здесь упрощенно):
ТВ / models.py:
class VideoFile(models.Model):
show = models.ForeignKey(Show, blank=True, null=True)
name = models.CharField(max_length=1024, blank=True)
size = models.IntegerField(blank=True, null=True)
ctime = models.DateTimeField(blank=True, null=True)
кино / models.py:
class VideoFile(models.Model):
movie = models.ForeignKey(Movie, blank=True, null=True)
name = models.CharField(max_length=1024, blank=True)
size = models.IntegerField(blank=True, null=True)
ctime = models.DateTimeField(blank=True, null=True)
После:Поскольку два объекта видеофайла очень похожи, я хочу избавиться от дублирования и создать новую модель в отдельном приложении с именем media, содержащим общий класс VideoFile, и использовать наследование для его расширения:
СМИ / models.py:
class VideoFile(models.Model):
name = models.CharField(max_length=1024, blank=True)
size = models.IntegerField(blank=True, null=True)
ctime = models.DateTimeField(blank=True, null=True)
ТВ / models.py:
class VideoFile(media.models.VideoFile):
show = models.ForeignKey(Show, blank=True, null=True)
кино / models.py:
class VideoFile(media.models.VideoFile):
movie = models.ForeignKey(Movie, blank=True, null=True)
Итак, мой вопрос: как я могу сделать это с помощью django-south и при этом сохранить существующие данные?
Все три этих приложения уже управляются миграцией на юг, и согласно южной документации, совмещать схему с миграцией данных является плохой практикой, и они рекомендуют сделать это в несколько шагов.
Я думаю, что это может быть сделано с помощью отдельных миграций, как это (при условии, что media.VideoFile уже создан)
Миграция схемы для переименования всех полей в tv.VideoFile и movies.VideoFile, которые будут перемещены в новую модель media.VideoFile, возможно, в нечто вроде old_name, old_size и т. Д.Схема миграции на тв.Видеофайл и фильмы.Видеофайл для наследования от медиа.ВидеофайлПеренос данных для копирования old_name в name, old_size в size и т. Д.Схема миграции для удаления полей old_Прежде чем я пройду всю эту работу, ты думаешь, это сработает? Есть ли способ лучше?
Если вам интересно, проект размещен здесь:http://code.google.com/p/medianav/