Ich versuche, ein benutzerdefiniertes Benutzermodell auf die einfachste Weise zu verwenden, indem ich AbstractUser
wie unter Djangos Standardbenutzer erweitern . Aber ich bin mir nicht sicher, wie ich das mit South richtig machen soll. Ich stoße auf ein Problem, wenn ich eine erste Schemamigration mit dem folgenden Befehl durchführe:
Ich habe meine erweiterte Benutzerklasse Player
in meiner Klasse tournaments
, die in settings.INSTALLED_APPS
aktiviert ist.
Um ein initiales syncdb
durchzuführen, muss die App tournaments
aktiviert sein. Sonst bekomme ich diesen Fehler:
Also aktiviere ich die tournaments
App, die mein Player
(benutzerdefiniertes Benutzer) Modell hat. Aber dann, bei der ersten Migration:
Wenn ich syncdb
überspringe, bekomme ich diesen Fehler, weil syncdb
notwendig ist, um South zu booten:
So scheint es, dass ich hier eine Hühner / Ei-Situation habe: Ich kann nicht syncdb
ohne mein Benutzermodell. Aber wenn ich syncdb
mit meinem Benutzermodell habe, kann ich keine anfängliche Migration durchführen!
Was ist der beste Weg, um dies zu umgehen? Ich habe ein paar Ideen, wie zum Beispiel das Ausführen des ersten syncdb
ohne django.contrib.auth
und django.contrib.admin
oder das Ausführen des ersten syncdb
ohne south
und dann das Konvertieren der App. Beide Optionen scheinen hackey und seltsam.
Versuchen Sie, ./manage.py migrate tournaments --fake 0001
auszuführen. Dadurch wird ein Eintrag in den südlichen Migrationsverlauf hinzugefügt, der besagt, dass die anfängliche Migration ausgeführt wurde, ohne SQL tatsächlich auszuführen. Alternativ können Sie class Meta: managed = False
für das benutzerdefinierte Benutzerobjekt festlegen, um django mitzuteilen, dieses Modell niemals zu synchronisieren.
Das hat funktioniert:
django.contrib.auth
, django.contrib.admin
und tournament
(die App mit meinem benutzerdefinierten Benutzermodell in settings.INSTALLED_APPS
. manage.py syncdb
django.contrib.auth
, django.contrib.admin
und tournament
manage.py schemamigration tournaments --initial
manage.py syncdb
manage.py migrate tournaments
Ganz hackey und schrecklich. Würde gerne einen besseren Weg kennen.
Ich habe genau das gleiche Problem, aber ich bekomme die CommandError:
, selbst wenn ich meine App in meinem INSTALLED_APPS
habe, und deinstalliere South. Ich habe dafür ein Ticket für South gefunden, # 1179, hier . Ein anonymen Poster hatte eine ähnliche Arbeit wie Thomas, aber ein bisschen komplexer. Sie sagen, dass es ein Problem mit South und nicht Django ist, aber ich sehe nicht, wie ich South deinstalliert habe, entfernte es von meinem INSTALLED_APPS
und ich habe immer noch genau den gleichen Fehler.
@dimadima Es sieht so aus, als ob Thomas 'Antwort Ihnen geholfen hätte, aber könnten Sie mir sagen, welcher Weg für Sie funktioniert hat und vielleicht seine Antwort akzeptieren, indem Sie auf das Häkchen klicken?
Tags und Links django django-south