2017-04-12 12 views
0

カスタムユーザーを作成しようとしていますが、request.userが取得されると、それはCustomUserのインスタンスではなくUserのインスタンスなので、取得できません余分なフィールドとメソッド。私はthisを見つけましたが、私はdjangoの管理者にログインしようとしていますが、もう動作しません。ここで Django - CustomUserの資格情報がありません

は私のコードです: models.py

class CustomUser(User): 
    timezone = models.CharField(max_length=50, default='Europe/Bucharest') 
    porecla = models.CharField(max_length=50, null=True) 
    selectat = models.BooleanField(default=False) 
    objects = UserManager() 

auth_backends.py - からrequest.user

from django.conf import settings 
from django.contrib.auth.backends import ModelBackend 
from django.core.exceptions import ImproperlyConfigured 
from django.apps import apps 


class CustomUserModelBackend(ModelBackend): 
    def authenticate(self, username=None, password=None): 
     try: 
      user = self.user_class.objects.get(username=username) 
      if user.check_password(password): 
       return user 
     except self.user_class.DoesNotExist: 
      return None 

    def get_user(self, user_id): 
     try: 
      return self.user_class.objects.get(pk=user_id) 
     except self.user_class.DoesNotExist: 
      return None 

    @property 
    def user_class(self): 
     if not hasattr(self, '_user_class'): 
      self._user_class = apps.get_model(*settings.CUSTOM_USER_MODEL.split('.', 2)) 
      if not self._user_class: 
       raise ImproperlyConfigured('Could not get custom user model') 
     return self._user_class 

settings.py

を使用している場合ので、私は、カスタムユーザーのメソッドを使用することができます
AUTHENTICATION_BACKENDS = ('football_app.auth_backends.CustomUserModelBackend',) 
CUSTOM_USER_MODEL = 'football_app.CustomUser' 

admin.py

class CustomUserAdmin(admin.ModelAdmin): 
    list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff', 'is_active', 'selectat',) 

admin.site.register(CustomUser, CustomUserAdmin) 

答えて

3

あなたが参照している記事は古くなっています。カスタムのUserモデルを作成する場合は、Userの代わりにAbstractUserをサブクラス化する方法があります。これは公式の文書でhereと説明されています。

関連する問題