Benutzerdefinierte Benutzermodelle und South

8

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:

    %Vor%
  • Also aktiviere ich die tournaments App, die mein Player (benutzerdefiniertes Benutzer) Modell hat. Aber dann, bei der ersten Migration:

    %Vor%

Wenn ich syncdb überspringe, bekomme ich diesen Fehler, weil syncdb notwendig ist, um South zu booten:

%Vor%

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.

    
Dmitry Minkovsky 08.04.2013, 04:17
quelle

3 Antworten

9

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.

    
Thomas 08.04.2013, 04:24
quelle
2

Das hat funktioniert:

  • Kommentar django.contrib.auth , django.contrib.admin und tournament (die App mit meinem benutzerdefinierten Benutzermodell in settings.INSTALLED_APPS .
  • manage.py syncdb
  • Uncomment 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.

    
Dmitry Minkovsky 08.04.2013 04:25
quelle
0

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?

    
Jacob Harding 01.05.2013 03:46
quelle

Tags und Links