2013-07-26 15 views
29

Sto utilizzando il modello utente predefinito in django per un bel po 'e mi rendo conto, se ho bisogno di migliorarlo ulteriormente, dovrei creare il mio modello utente personalizzato in Django 1.5.Manager non è disponibile; L'utente è stato scambiato per "pet.Person"

Ho creato il mio modello utente personalizzato e ho una funzione che consente agli utenti di accedere. Penso che il mio modello utente personalizzato sia incompatibile con la mia funzione perché non mi permetterebbe di fare request.user. Come posso risolvere questo problema in modo da poter utilizzare nuovamente request.user?

Visto

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

modelli

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 

risposta

57

Il problema è che User si riferisce a django.contrib.auth.models.User e ora avete ottenuto un Custom Userpet.Person ammesso che abbiate nel settings.py

AUTH_USER_MODEL = "pet.Person" 

voi HAV e per definire User con il modello Custom User e si può fare questo con get_user_model nella parte superiore del file in cui si utilizza User

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

ora si sarà in grado di utilizzare Custom User modello e il problema è stato risolto.

+0

Ciao, sembra che risolverà il mio problema - Mi chiedevo quale file dovrebbe essere inserito nel codice? Grazie! –

+2

@GershomMaes AUTH_USER_MODEL all'interno di settings.py e l'altro codice nelle tue visualizzazioni o ovunque tu usi il modello Utente, Prego: D –

+0

Ha funzionato, molto apprezzato! –

Problemi correlati