2013-07-26 16 views
29

我一直在django中使用默認的用戶模型是一個相當的高招,我意識到,如果我需要進一步增強它,我將不得不創建我自己的自定義用戶模型django 1.5。管理器不可用;用戶已被換成'pet.Person'

我創建了我的自定義用戶模型,並且我有一個允許用戶登錄的功能。 我認爲我的自定義用戶模型與我的函數不兼容,因爲它不會允許我執行request.user。我該如何解決這個問題,以便我可以再次使用request.user?

意見

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

車型

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 

回答

57

的問題是,Userdjango.contrib.auth.models.User,現在你已經有了一個Custom Userpet.Person假設你在settings.py

AUTH_USER_MODEL = "pet.Person" 

你HAV E要定義UserCustom User模型,你可以在文件的頂部,你用User

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

現在你將能夠使用Custom User模型和問題已得到修復與get_user_model做到這一點。

+0

你好,這看起來會解決我的問題 - 我想知道代碼應該進入哪個文件?謝謝! –

+2

@GershomMaes AUTH_USER_MODEL裏面settings.py和其他代碼在你的意見或任何你使用用戶模型,不客氣:D –

+0

工作,非常感謝! –