Ich habe den dummen Fehler gemacht, zu viele Modelle in der gleichen Django-App zu erstellen, jetzt möchte ich sie in drei verschiedene teilen. Das Problem ist: Es gibt bereits Daten in der Produktion von zwei Kunden, daher muss ich jede geplante Schema- / Datenmigration sorgfältig planen (ich benutze django-south). Ich bin unsicher, wie es weitergehen soll, jeder Rat würde sehr geschätzt werden.
(Ich benutze PostgreSQL auf einem Ubuntu-Server 12.4 LTS, wenn das relevant ist)
Ich habe über die Verwendung von db.rename_table
nachgedacht, kann aber nicht herausfinden, wie die Fremdschlüssel korrekt aktualisiert werden zu diesen Modellen (alt zu neu) - irrelevant auf der Datenbankebene (da die Tabellenumbenennung bereits abgedeckt wurde), aber nicht so auf der ORM-Ebene.
Aktualisieren : nachdem Sie darüber nachgedacht haben und diese Frage an Programmierer gestellt haben .SE, ich habe beschlossen, die Dinge einfach zu halten und keine Sorgen über Migrationen zwischen den Hauptversionen des Produkts zu machen. Kurzfristig benutze ich einfach db.rename_table
, um den neuen Namen zu finden, während auch db_table
wie von Daniel Roseman vorgeschlagen verwendet wird, während die Modelle in der alten App bleiben. Beim Upgrade auf eine Hauptversion wechsle ich zur neuen App und lösche alle Migrationen komplett ab (so dass neue Installationen der neuen Version die Datenbank "wie besehen" erstellen, anstatt alle historischen Migrationen zu durchlaufen).
Ich verstehe nicht, warum Sie überhaupt eine Datenmigration benötigen.
Verschieben Sie die Modelle einfach in die neue App und fügen Sie ein db_table
Ich habe in letzter Zeit etwas Ähnliches in kleinerem Rahmen gemacht und das war mein Prozess:
Die Gründe, warum ich die Datenmigration nicht verwendet habe:
Die einfachste Lösung, an die ich denken könnte:
SchemaMigration
, indem Sie den Typ jedes Fremdschlüssels für Modelle in der alten App in einen primitiven Typ ändern (einschließlich der darin enthaltenen); SchemaMigration
, indem Sie jeden primitiven Typ erneut in einen Fremdschlüssel umwandeln, der jetzt auf die neuen Tabellen zeigt; Mühsam, ja, aber würde es tun. Ich hoffe jedoch auf eine bessere Lösung.
Tags und Links django database django-south schema-migration