2013-07-26 7 views
29

Używam domyślnego modelu użytkownika w django dla całkiem nieźle i zdaję sobie sprawę, że jeśli będę musiał go jeszcze ulepszyć, będę musiał stworzyć swój własny niestandardowy model użytkownika w django 1.5.Menedżer jest niedostępny; Użytkownik został zamieniony na "pet.Person"

Stworzyłem niestandardowy model użytkownika i mam funkcję, która pozwala użytkownikom się logować. Myślę, że mój niestandardowy model użytkownika jest niezgodny z moją funkcją, ponieważ nie pozwoliłby mi na wykonanie request.user. Jak mogę to naprawić, aby móc ponownie użyć request.user?

odsłony

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}) 

modele

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 

Odpowiedz

57

Problemem jest to, że User dotyczy django.contrib.auth.models.User i teraz masz dostał Custom Userpet.Person zakładając, że masz w settings.py

AUTH_USER_MODEL = "pet.Person" 

ty hav e zdefiniować User z modelem Custom User i można to zrobić z get_user_model w górnej części pliku, w którym używasz User

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

teraz będzie można korzystać Custom User model i problem został rozwiązany.

+0

Witam, to wygląda na to, że rozwiąże mój problem - zastanawiałem się, do którego pliku powinien wejść kod? Dzięki! –

+2

@GershomMaes AUTH_USER_MODEL wewnątrz settings.py i drugi kod w widokach lub w każdym miejscu, w którym używasz modelu użytkownika, Nie ma za co: D –

+0

Pracowałem, doceniam! –

Powiązane problemy