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)