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
Ciao, sembra che risolverà il mio problema - Mi chiedevo quale file dovrebbe essere inserito nel codice? Grazie! –
@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 –
Ha funzionato, molto apprezzato! –