Обновление: пожалуйста, не обращайте внимания на мой пост ниже.Используйте исходную версию пользовательского бэкенда аутентификации и добавьте django.contrib.auth.backends.ModelBackend
в качестве второго (резервного) бэкенда под пользовательский в AUTHENTICATION_BACKENDS
в вашем settings.py
.Он имеет тот же эффект и намного проще.
Теперь я избавился от патча и вместо этого расширил настраиваемый бэкэнд аутентификации , с которым я связался в своем вопросе, чтобы прибегнуть к методам исходного бэкенда аутентификации, если пользователя не удается найтитаблица участника (мой пользовательский пользователь).Если это происходит, выдается предупреждение (которое может немного раздражать при запуске тестов).Кроме того, тесты сообщений вызывают много исключений, но, похоже, они не оказывают никакого негативного влияния на тесты.Я надеюсь, что они намеренные.^^
# -*- encoding: utf-8 -*-
import logging
from django.conf import settings
from django.contrib.auth.backends import ModelBackend
from django.core.exceptions import ImproperlyConfigured
from django.db.models import get_model
logger = logging.getLogger(__name__)
# http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/
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:
user = super(CustomUserModelBackend, self).authenticate(username, password)
if user:
logger.warn("Using User, not Member: %s" % user)
return user
def get_user(self, user_id):
try:
return self.user_class.objects.get(pk=user_id)
except self.user_class.DoesNotExist:
user = super(CustomUserModelBackend, self).get_user(user_id)
if user:
logger.warn("Using User, not Member: %s" % user)
return user
@property
def user_class(self):
if not hasattr(self, '_user_class'):
self._user_class = 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