2013-07-26 3 views
29

Ich benutze das Standard-Benutzermodell in Django für ziemlich einen Abit und ich weiß, wenn ich es weiter verbessern muss, würde ich mein eigenes benutzerdefiniertes Benutzermodell in erstellen Django 1.5.Manager ist nicht verfügbar; Benutzer wurde für 'pet.Person' getauscht

Ich habe mein benutzerdefiniertes Benutzermodell erstellt und ich habe eine Funktion, mit der Benutzer sich anmelden können. Ich denke, dass mein benutzerdefiniertes Benutzermodell mit meiner Funktion nicht kompatibel ist, da es mir nicht erlauben würde, request.user auszuführen. Wie kann ich das beheben, damit ich request.user erneut verwenden kann?

Ansichten

def LoginRequest(request): 
     form = LoginForm(request.POST or None)  
    if request.user.is_authenticated(): 
      username = User.objects.get(username=request.user) 
      url = reverse('world:Profile', kwargs = {'slug': person.slug}) 
      return HttpResponseRedirect(url)  
     if request.POST and form.is_valid(): 

      user = form.authenticate_user() 
      login(request, user) 
      username= User.objects.get(username=request.user) 
       person = Person.objects.get(user=request.user) 
      url = reverse('world:Profile', kwargs = {'slug': person.slug}) 
      return HttpResponseRedirect(url) 

    return render(request, 'login.html',{'form': form}) 

Modelle

class PersonManager(BaseUserManager): 
    def create_user(self, email,date_of_birth, username,password=None,): 
     if not email: 
      msg = 'Users must have an email address' 
      raise ValueError(msg) 

     if not username: 
       msg = 'This username is not valid' 
     raise ValueError(msg) 

     if not date_of_birth: 
      msg = 'Please Verify Your DOB' 
      raise ValueError(msg) 

     user = self.model(

email=PersonManager.normalize_email(email),username=username,date_of_birth=date_of_birth) 

     user.set_password(password) 
     user.save(using=self._db) 
     return user 

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


class Person(AbstractBaseUser, PermissionsMixin): 

    email = models.EmailField(verbose_name='email address',max_length=255,unique=True,db_index=True,) 
    username = models.CharField(max_length=255, unique=True) 
    date_of_birth = models.DateField() 

    USERNAME_FIELD = 'email' 
    REQUIRED_FIELDS = ['username', 'date_of_birth',] 

    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    is_staff = models.BooleanField(default=False) 

    objects = PersonManager() 

    def get_full_name(self): 
     return self.email 

    def get_short_name(self): 
     return self.email 

    def __unicode__(self): 
     return self.email 

Antwort

57

Das Problem ist, dass User zu django.contrib.auth.models.User bezieht und jetzt hast du dich ein Custom Userpet.Person vorausgesetzt, Sie haben in der settings.py

AUTH_USER_MODEL = "pet.Person" 

hav e User mit dem Custom User Modell definieren, und Sie können dies am Anfang der Datei mit get_user_model tun, wo Sie User

from django.contrib.auth import get_user_model 
User = get_user_model() 

jetzt verwenden, werden Sie Custom User Modell nutzen können und das Problem behoben wurde.

+0

Hallo, das sieht so aus, als würde es mein Problem lösen - ich habe mich gefragt, in welche Datei dieser Code gehen soll? Vielen Dank! –

+2

@GershomMaes AUTH_USER_MODEL in settings.py und den anderen Code in Ihren Ansichten oder wo immer Sie das Benutzermodell verwenden, Gern geschehen: D –

+0

Arbeitete, sehr geschätzt! –

Verwandte Themen