1. ホーム
  2. django

[解決済み] Managerは使用できません。Userは'pet.Person'に交換されました。

2023-01-22 17:54:16

質問

私は 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"

を定義する必要があります。 User と共に Custom User モデルで、これを get_user_model を使用するファイルの先頭で User

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

では Custom User のモデルで、問題が修正されました。