Le gestionnaire n’est pas disponible L’utilisateur a été échangé contre ‘pet.Person’

J’ai utilisé le modèle d’utilisateur par défaut de django et je me rends compte que si je dois l’améliorer, je devrai créer mon propre modèle d’utilisateur personnalisé dans django 1.5.

J’ai créé mon modèle d’utilisateur personnalisé et j’ai une fonction qui permet aux utilisateurs de se connecter. Je pense que mon modèle d’utilisateur personnalisé est incompatible avec ma fonction car il ne me permettrait pas de faire request.user. Comment puis-je résoudre ce problème pour pouvoir utiliser request.user à nouveau?

vues

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

des modèles

  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 

Le problème est que l’ User réfère à django.consortingb.auth.models.User et maintenant vous avez un Custom User pet.Person supposant que vous avez dans les settings.py

 AUTH_USER_MODEL = "pet.Person" 

vous devez définir l’ User avec le modèle d’ Custom User et vous pouvez le faire avec get_user_model en haut du fichier où vous utilisez l’ User

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

Vous pourrez désormais utiliser Custom User modèle Custom User et le problème a été résolu.