gpt4 book ai didi

django - 经理不在;用户已被交换为 'pet.Person'

转载 作者:行者123 更新时间:2023-11-28 19:33:34 25 4
gpt4 key购买 nike

我在 django 中使用默认用户模型已经有一段时间了,我意识到,如果我需要进一步增强它,我将不得不在 django 1.5 中创建我自己的自定义用户模型。

我创建了我的自定义用户模型,并且我有一个允许用户登录的功能。我认为我的自定义用户模型与我的功能不兼容,因为它不允许我执行 request.user 。我该如何解决这个问题,以便我可以再次使用 request.user?

观看次数

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

模型

 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

最佳答案

问题是 User 指的是 django.contrib.auth.models.User 现在你有一个 Custom User pet.Person 假设你在 settings.py

AUTH_USER_MODEL = "pet.Person"

您必须使用 Custom User 模型定义 User 并且您可以在您使用的文件顶部使用 get_user_model 来完成此操作用户

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

现在您将能够使用Custom User 模型并且问题已得到解决。

关于django - 经理不在;用户已被交换为 'pet.Person',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17873855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com