2013-07-26 24 views
29

için değiştirildi Oldukça bir abit için django varsayılan kullanıcı modeli kullanıyorum ve daha da geliştirmek gerekirse, ben kendi özel Kullanıcı Modelimi oluşturmak zorunda kalacağım, farkındayım django 1.5.Yönetici mevcut değil; Kullanıcı 'pet.Person'

Özel kullanıcı modelimi oluşturdum ve kullanıcıların oturum açmasına izin veren bir işlev var. Özel kullanıcı modelimin işlevimle uyumlu olmadığını düşünüyorum çünkü request.user yapmama izin vermiyordu. Bunu nasıl giderebilirim, böylece request.user'yi tekrar kullanabilirim?

görünümleri

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

modelleri

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 

cevap

57

sorun Userdjango.contrib.auth.models.User atıfta ve şimdi bir Custom Userpet.Person Eğer settings.py

AUTH_USER_MODEL = "pet.Person" 

sahip varsayarak var ki sen hav E Custom User modeliyle User tanımlamak ve şimdi Custom User modeli kullanmak mümkün olacak User

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

kullanıp sorun giderildi nereye dosyanın üst kısmında get_user_model ile yapabilirsiniz.

+0

Merhaba, bu benim problemimi çözecek gibi görünüyor - hangi kodun içeri girmesi gerektiğini merak ediyordum? Teşekkürler! –

+2

@GershomMaes AUTH_USER_MODEL iç ayarları.py ve diğer kod görünümlerinizde veya Kullanıcı modelini nerede kullanırsanız kullanın, Hoş Geldiniz: D –

+0

Çalışılan, çok takdir! –