Ich benutze das Standard-Benutzermodell in Django für ziemlich einen Abit und ich weiß, wenn ich es weiter verbessern muss, würde ich mein eigenes benutzerdefiniertes Benutzermodell in erstellen Django 1.5.Manager ist nicht verfügbar; Benutzer wurde für 'pet.Person' getauscht
Ich habe mein benutzerdefiniertes Benutzermodell erstellt und ich habe eine Funktion, mit der Benutzer sich anmelden können. Ich denke, dass mein benutzerdefiniertes Benutzermodell mit meiner Funktion nicht kompatibel ist, da es mir nicht erlauben würde, request.user auszuführen. Wie kann ich das beheben, damit ich request.user erneut verwenden kann?
Ansichten
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})
Modelle
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
Hallo, das sieht so aus, als würde es mein Problem lösen - ich habe mich gefragt, in welche Datei dieser Code gehen soll? Vielen Dank! –
@GershomMaes AUTH_USER_MODEL in settings.py und den anderen Code in Ihren Ansichten oder wo immer Sie das Benutzermodell verwenden, Gern geschehen: D –
Arbeitete, sehr geschätzt! –