2016-03-19 13 views
1

Ich habe einen CustomUser von AbstractUser in Django 1.9 erstellt. Hinzufügen auf admin.sites.register, als ich create superuser, Django haben erfolgreich erstellt, aber wenn ich mich auf System anmelden den Benutzer nicht existierte. den Code wie folgt vor:Django Custom Benutzer loggte sich nicht ein

Auf customuser/models.py:

from __future__ import unicode_literals 
from django.db import models 
from django.contrib.auth.models import AbstractUser 
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager 


class CustomUserManager(BaseUserManager): 
    def create_user(self, username, email, first_name, last_name, cpf, password=None): 
     user = self.model(
      username=username, 
      email=email, 
      first_name=first_name, 
      last_name=last_name, 
      cpf=cpf 
     ) 
     return user 

    def create_superuser(self, username, email, first_name, last_name, cpf, password): 
     user = self.create_user(username, email, first_name, last_name, cpf, 
           password=password) 
     user.is_super_user = True 
     user.save() 
     return user 


class CustomUser(AbstractUser): 

    SEXO_CHOICES = (
     (u'Masculino', u'Masculino'), 
     (u'Feminino', u'Feminino'), 
    ) 

    cpf = models.BigIntegerField(unique=True) 
    phone = models.CharField(max_length=15, blank=True) 
    is_super_user = models.BooleanField(default=False) 
    data_de_nascimento = models.DateField(null=True) 
    sexo = models.CharField(max_length=9, null=True, choices=SEXO_CHOICES) 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = ['email', 'first_name', 'last_name', 'cpf'] 
objects = CustomUserManager() 

Auf settins.py, füge ich die Zeile:

INSTALLED_APPS = [ 
    ... 
    'customuser', 
] 

... 

AUTH_USER_MODEL = 'customuser.CustomUser' 

Und mein customuser/admin.py:

from django.contrib import admin 

from models import CustomUser, CustomUserManager 


admin.site.register(CustomUser) 

Vielen Dank für Ihre Hilfe.

+0

Wo verwenden Sie den benutzerdefinierten CustomUserManager-Manager? Sollte nicht 'objects = CustomUserManager()' im Modell definiert sein? – alecxe

+0

Entschuldigung. Ich vergesse zu kopieren. Ich korrigiere es jetzt. Dieser Code war da. Das ist nicht das Problem. – dsbonafe

+0

Sind Sie sicher, dass Sie 'objects = ...' richtig eingerückt haben? – alecxe

Antwort

0

See these docs auf benutzerdefinierte Benutzer mit Admin-Site arbeiten.


UPDATE:

Sorry, vorher dachte ich, Sie Ihr Modell aus AbstractBaseUser wurden vererben, damit diese Antwort Sie Fehler gab.

Da Sie von AbstractUser erben, erhält Ihre Unterklasse automatisch is_staff Feld. Sie müssen also nur is_staff auf True in create_superuser Methode setzen.

class CustomUserManager(...): 
    # ... 

    def create_superuser(...): 
     # ... 
     user.is_staff = True 
     user.save() 
     return user 
+0

Es funktioniert nicht. Bringt mich zu Konflikten mit der Superklasse zurück. – dsbonafe

+0

@ user2732966 Entschuldigung. Ich habe deine Frage nicht sorgfältig gelesen. Ich habe die Antwort aktualisiert. Schau, ob es jetzt hilft. – xyres

+0

Hilft noch nicht. Gleiches Problem. – dsbonafe