Расширение модели Django User не может получить доступ к свойству
Я пытаюсь расширить модель пользователя по умолчанию в Django.
Я определил класс под названием Профиль.
# code in myapp/models/profile.py
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User)
field = models.CharField(max_length=30)
class Meta:
app_label="myapp"
В моей функции просмотра я вызываю метод, где я получаю исключение:
def my_view_function(request):
field = get_field(request.user)
...
def get_field(user):
return user.profile.field
# also tried return user.get_profile().field with AUTH_PROFILE_MODULE in settings.py set to "myapp.Profile", still does not work.
Я получаю AttributeError в моей трассировке стека 'unicode' object has no attribute 'get_profile'
или же 'unicode' object has no attribute 'profile'
,
Когда я пытаюсь объединить объект пользователя в get_field() со строкой, я получаю сообщение об ошибке 'str' cannot concatenate with 'SimpleLazyObject'
, Я попытался прочитать request.user возвращает SimpleLazyObject, как мне его "разбудить"? но это не помогло.
Я использую промежуточное программное обеспечение, чтобы гарантировать, что пользователь вошел в систему, поэтому я уверен, что пользователь вошел в систему. Что не так с объектом пользователя? Почему он говорит, что пользовательский объект имеет '__unicode__'
тип.
Заранее спасибо!
2 ответа
Починил это. Я внимательно посмотрел на трассировку стека и заметил, что передаю значение поля другой функции, которая ожидает пользовательский объект. Это привело к путанице __unicode__
ошибка.
Предполагая, что у вас есть AUTH_PROFILE_MODULE = 'yourapp.Profile'
в вашем settings.py
Вы должны быть в состоянии позвонить get_profile()
метод на User
объект, чтобы получить Profile
модель (например, request.user.get_profile()
).
Чтобы получить актуальное поле, вам нужно будет позвонить request.user.get_profile().field
,
Обратите внимание, что профили пользователей устарели с django 1.5 в пользу пользовательских моделей.