2013-03-03 1 views
8

Ich habe eine App, die ich auf Django 1.4.5 hatte, auf Django 1.5 aktualisiert und die Migration auf ein benutzerdefiniertes Benutzermodell abgeschlossen. Wenn ich mich mit meinem eigenen Authentifizierungsformular bei meiner App anmelde, mit meinen Superuser-Anmeldeinformationen (erstellt unter manage.py syncdb), funktioniert alles einwandfrei.Django-Administrator meldet sich nicht ordnungsgemäß mit benutzerdefiniertem Benutzermodell an

Ich kann authentifiziert werden und wenn ich zu /admin gehe, bin ich bereits eingeloggt, wie erwartet. Ich kann navigieren und das Admin-Panel perfekt nutzen. Allerdings, wenn ich versuche, von /admin auf den Admin-Panel anmelden, das django Admin-Login-Formular, erhalte ich die Fehlermeldung:

Please enter the correct email and password for a staff account. Note that both fields may be case-sensitive.

ich einige untersuchen habe und dachte, dass es etwas mit ModelAdmin zu tun haben könnte, so dass ich folgte this example aus der Dokumentation und erstellte eine benutzerdefinierte ModelAdmin. Das Problem besteht jedoch weiterhin.

Irgendwelche Ideen, was könnte das verursachen?

+0

Sie haben AUTH_USER_MODEL gesetzt in settings.py, nicht wahr? –

+0

Yup, ich habe das Set. –

+0

Haben Sie 'AbstractUser' oder' AbstractBaseUser' für Ihre Benutzermodell-Erweiterung verwendet? –

Antwort

4

Haben Sie folgende Zeilen zu Ihrer create_superuser Funktion hinzugefügt, die unter BaseUserManager ist? Es könnte wie folgt aussehen:

class CustomUserManager(BaseUserManager): 
    def create_user(self, username, email, password=None): 
     if not username: 
      raise ValueError('Dude you need a username.') 
     if not email: 
      raise ValueError(
       'type an e-mail..') 

     new_user = self.model(
      username=username, 
      email=CustomUserManager.normalize_email(email)) 
     new_user.set_password(password) 
     new_user.save(using=self._db) 
     return new_user 

    def create_superuser(self, username, email, password): 
     new = self.create_user(
      username, 
      email, 
      password=password 
     ) 
     new.is_active = True 
     new.is_staff = True 
     new.is_superuser = True 
     new.save(using=self._db) 
     return new 

Im Fokus:

new.is_active = True 
    new.is_staff = True 
    new.is_superuser = True 
+2

djangos Admin prüft nach 'request.user.is_active' und' request.user.is_staff' um Benutzer einzuloggen, also denke ich, er sollte hinzufügen 'new.is_active = True' zu ​​dieser Liste, auf die" fokussiert "werden soll. – AJJ