Всем привет!
Воспользовался описанным способом через "Наследование моделей".
Но столкнулся с немного непонятным для меня поведением, отличным от описания.
Что имею:
models.py
from django.contrib.auth.models import UserManager, User
class Profile(User):
city = models.CharField(verbose_name=_("City"), max_length=128)
country = models.CharField(verbose_name=_("Country"), max_length=128)
objects = UserManager()
auth_backends.py
from .models import Profile
class ProfileModelBackend(ModelBackend):
def authenticate(self, username=None, password=None, **kwargs):
if username:
username_or_email = Q(username=username) | Q(email=username)
try:
profile = Profile.objects.get(username_or_email, **kwargs)
if profile.check_password(password):
return profile
except Profile.DoesNotExist:
pass
....
def get_user(self, user_id):
try:
return Profile.objects.get(pk=user_id)
except Profile.DoesNotExist:
return None
settings.py
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"profiles.auth_backends.VHMSProfileModelBackend",
)
Далее я отлаживал сохранение вьюхи и через дебаггер обнаружил, что в request.user лежит экземпляр User, а в request.user.profile уже лежит экземпляр Profile (с набором полей из User + Profile).
Судя по описанию, я должен был получить в request.user свой экземпляр Profile.
Я что-то сделал не так или статья могла устареть?
И второе момент, после перехода на наследование моделей, я стабильно в дебаггере вижу ошибки вида:
File ...python3.3/site-packages/django/db/models/manager.py
raise AttributeError("Manager isn't accessible via %s instances" % type.__name__)
AttributeError: Manager isn't accessible via Profile instances
в параметрах _base_manager или objects
При этом сохранение и отображение данных вьюхи работает корректно.
Доступ к данным модели я получаю в виде Profile.objects.get() и не совсем понимаю причины возникновения ошибки + ранее я использовал способ № 1 (через параметр AUTH_PROFILE_MODULЕ) и никогда не видел такой ошибки. Есть идеи, что не так и как это исправить?
Спасибо за внимание!
Окружение: python-3.3; django-1.6.5