Модель Django: возвращение имени пользователя от текущего пользователя - PullRequest
0 голосов
/ 09 апреля 2009

Я работаю над приложением Django для размещения мультимедиа (особенно аудио и изображений). У меня есть отдельные галереи изображений и фотографии в моей модели, и они связаны с ForeignKey (не уверен, что это правильно, но все еще учусь). Мне нужно, чтобы класс Album __unicode__ возвратил имя пользователя владельца альбома.

class Album(models.Model):
    artist = models.ForeignKey(User, unique=True, related_name='artpunk')

    def __unicode__(self):
        return self.artist.username

Я знаю, что свойство username существует, и подтвердил его, вставив dir() и проверив вывод консоли. Проблема в том, что когда я вхожу в раздел изображений на панели администратора, он просто заявляет «Нераспознанная команда». Могут ли User свойства не быть доступными для моделей? Или я что-то не так делаю?

РЕДАКТИРОВАТЬ: Забыл упомянуть, используя Python 2.6 с Django 1.0.2. Точный текст ошибки, как и выше, просто "Нераспознанная команда" выделен жирным шрифтом, и я уже выполнил syncdb без проблем. Тем не менее, сегодня утром я перезапустил syncdb (ничего не выдал), просто чтобы повторить попытку, и теперь, похоже, все работает нормально.

Воспроизводится путем изменения следующего:

    def __unicode__(self):
        return self.artist.username

Примерно так:

    def __unicode__(self):
        return self.artist.username+'\'s Gallery'

1 Ответ

1 голос
/ 09 апреля 2009

Не должно быть проблем с доступом к пользователю (даже в качестве внешнего ключа) из модели. Я только что закончил тестировать сам, и, похоже, нет существенной разницы.

def __unicode__(self):
    return self.user.username

Кстати, вы также должны иметь возможность вернуть self.artist, поскольку я считаю, что User.__unicode__() в любом случае возвращает имя пользователя.

Каковы точные детали ошибки? Какую версию Django / Python вы используете? Вы внесли изменения в свою модель, которая еще не отражена в базе данных? Иногда я замечал, что вам просто нужно перезапустить тестовый сервер, чтобы все работало хорошо. Особенно в админ.

В ответ на ваши изменения попробуйте привести имя пользователя в виде строки:

str(self.user.username)
...