Использование юга для рефакторинга модели 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/

Ответы на вопрос(4)

Ваш ответ на вопрос