Расширение модели 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 в пользу пользовательских моделей.

Другие вопросы по тегам