Ich habe eine App entfernt, die ein paar benutzerdefinierte Felder aus meinem Projekt enthielt. Wenn ich jetzt versuche, meine Migrationen auszuführen, bekomme ich natürlich ImportError
. Diese Felder waren sehr grundlegende Anpassungen wie folgt:Wie spotze ich ein benutzerdefiniertes Feld, das gelöscht wird, damit Migrationen im Süden ausgeführt werden?
from django.db.models.fields import IntegerField
class SomeField(IntegerField):
def get_internal_type(self):
return "SomeField"
def db_type(self, connectio=None):
return 'integer'
def clean(self, value):
# some custom cleanup
pass
Also keine von ihnen enthalten Anpassungen auf Datenbankebene.
Wenn ich diesen Code entfernt habe, habe ich Migrationen erstellt, so dass die anschließende Migration alle lief. Aber wenn ich versuche, sie auf einer Datenbank vor dem Löschen auszuführen, habe ich meinen Fehler bemerkt.
Ich kann eine einfache App neu erstellen und diese Importe funktionieren, aber im Idealfall würde ich gerne wissen, ob South einen Mechanismus zur Lösung dieser Probleme hat? Oder gibt es Best Practices? Es wäre cool, wenn ich diese Probleme nur dadurch lösen könnte, dass ich meine Migrationen ändere und die Codebasis nicht berühre.
(Django 1.3, Süd-0.7.3)
Richtig. Aber ich möchte Optionen erkunden, die nicht das Zurückspulen meines VCS beinhalten. Schließlich sollte ich in der Lage sein, eine Datenbank mit HEAD zu erstellen. – muhuk
@muhuk Ich habe keine Ahnung, dass es so etwas gibt. Sie können jedoch Migrationen so lange ändern, wie es in der Logik richtig ist und gut für das Schema in der Produktions-DB und das Generieren der Test-DB funktioniert. Sie können beispielsweise einfach die zuletzt hinzugefügten Migrationen löschen und dann ein Feld entfernen oder Modellzeilen in Migrationsdateien ändern, um ein bestimmtes Feld zu löschen. Mach es sorgfältig. – okm