96

私はかなり長い間 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
4

6 に答える 6

191

問題は、 あなたが持っていると仮定して、User参照していることです。django.contrib.auth.models.UserCustom User pet.Personsettings.py

AUTH_USER_MODEL = "pet.Person"

モデルで定義するUser必要があり、使用するファイルの上部でこれを行うことができますCustom Userget_user_modelUser

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

Custom Userこれでモデルを使用できるようになり、問題は修正されました。

于 2013-07-26T06:08:56.050 に答える
4

forms.py

# change
from django.contrib.auth.models import User

# to
from django.contrib.auth import get_user_model

次に、先頭に次のコードを追加します

User = get_user_model()
于 2021-05-14T08:02:35.333 に答える