Отображение имени нестандартного формата на странице администрирования django - PullRequest
2 голосов
/ 04 февраля 2020

Я хочу отобразить имя и фамилию. Для этого я использовал метод __str__(). Но это не работает.

class OnlineUser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.user.first_name} {self.user.last_name}"

Вместо него отображается идентификатор пользователя.

В admin.py,

class OnlineUsersAdmin(admin.ModelAdmin):
    # a list of displayed columns name.
    list_display=['user']

admin.site.register(OnlineUsers, OnlineUsersAdmin)

Где я делаю неправильно? Как получить нужный формат?

Версия:

Django==2.0.1

Отладка:

user_info=OnlineUsers.objects.get_or_create(user=self.user)
print(user_info.__str__())

Вывод:

((<OnlineUsers: FIRST_NAME LAST_NAME >, False))

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

list_display - (Django do c) поддержка вызываемые методы тоже. Итак, определите метод user(...) для администратора модели как

class OnlineUsersAdmin(admin.ModelAdmin):
    # a list of displayed columns name.
    list_display = ['user']

    <b>def user(self, instance):
        return instance.__str__()</b>
1 голос
/ 04 февраля 2020

Вы должны использовать __str__ вместо пользователя в list_display:

list_display=['__str__']

В противном случае вы указываете django, чтобы показать user поле. И поскольку модель User не имеет переопределенного метода __str__, вы видите идентификатор пользователя.

Также вы можете просто удалить атрибут list_display. В этом случае по умолчанию будет использоваться __str__.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...