Verwendung von South zur Umgestaltung eines Django-Modells mit Vererbung

Ich habe mich gefragt, ob die folgende Migration mit Django möglich istSüden und behalten immer noch Daten.

Vor:

Ich habe derzeit zwei Apps, eine mit dem Namen tv und eine mit dem Namen movies, jeweils mit einem VideoFile-Modell (hier vereinfacht):

tv / 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)

movies / 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)
Nach dem:

Da die beiden Videodateiobjekte so ähnlich sind, möchte ich die Duplizierung beseitigen und ein neues Modell in einer separaten App namens media erstellen, die eine generische VideoFile-Klasse enthält, und die Vererbung verwenden, um sie zu erweitern:

media / 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)

tv / models.py:

class VideoFile(media.models.VideoFile):
    show = models.ForeignKey(Show, blank=True, null=True)

movies / models.py:

class VideoFile(media.models.VideoFile):
    movie = models.ForeignKey(Movie, blank=True, null=True)

Meine Frage ist also, wie kann ich das mit Django-South erreichen und noch vorhandene Daten pflegen?

Alle drei Apps werden bereits von Südmigrationen verwaltet. Gemäß der Süddokumentation ist es eine schlechte Praxis, ein Schema und eine Datenmigration zu kombinieren, und sie empfehlen, diese in wenigen Schritten durchzuführen.

Ich denke, es könnte mit separaten Migrationen wie dieser durchgeführt werden (vorausgesetzt, media.VideoFile ist bereits erstellt)

Schemamigration, um alle Felder in tv.VideoFile und movies.VideoFile umzubenennen, die in das neue media.VideoFile-Modell verschoben werden, möglicherweise in etwas wie old_name, old_size uswSchema-Migration zu tv.VideoFile und movies.VideoFile, um von media.VideoFile zu erbenDatenmigration zum Kopieren von old_name nach name, old_size nach size uswSchema-Migration zum Entfernen von old_-Feldern

Glauben Sie, dass das funktionieren wird, bevor ich die ganze Arbeit durchführe? Gibt es einen besseren Weg?

Wenn Sie interessiert sind, wird das Projekt hier gehostet:http://code.google.com/p/medianav/

Antworten auf die Frage(4)

Ihre Antwort auf die Frage