2017-04-12 42 views
0

我想做一個自定義用戶,但有一個問題,當我得到request.user,它是用戶的一個實例,而不是CustomUser的一個實例,所以我沒有得到額外的領域和方法。我發現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

您所指的文章已過時。如果你想創建一個自定義用戶模型,那麼繼續使用AbstractUser而不是User。這在官方文檔中解釋爲here