Django "xxxxxx Object" отображает настройку на боковой панели действий администратора - PullRequest
88 голосов
/ 18 февраля 2012

Я хотел бы изменить стандартное поведение того, как на боковой панели недавних изменений администратора отображается имя добавленных «объектов».См. Рисунок ниже:

In the recent actions module, it also shows new objects as

Я хотел бы изменить, как они названы в Admin.В идеале я хотел бы иметь возможность изменить его с «MyModelName object» на, как в примере с объектом «Policy», что-то вроде «Policy: {{значение поля« Policy Name »политики.}}.

Я думал, что __unicode__ для моей модели Пациента справился с этим, но это не так. Любая помощь приветствуется.

Ответы [ 8 ]

141 голосов
/ 18 февраля 2012

__unicode__ делает это.Ваша модель должна выглядеть примерно так:

class SomeModel(models.Model):
    def __unicode__(self):
       return 'Policy: ' + self.name

В Python 3 вам нужно использовать __str__:

def __str__(self):
   return 'Policy: ' + self.name
25 голосов
/ 14 ноября 2015

Использование метода __str__ работает на Python3 и Django1.8:

class MyModel(models.Model):

    name = models.CharField(max_length=60)

    def __str__(self):
        return 'MyModel: {}'.format(self.name)
13 голосов
/ 18 февраля 2012

Строка, которую вы видите, исходит из метода __unicode__, как уже упоминали другие. Но дело в том, что администратор сохраняет строковое представление объекта при создании события журнала, поэтому, если вы добавите реализацию __unicode__ после сохранения записи журнала, вы не увидите новые заголовки на старых элементах, только после того, как вы сделаете несколько новых активность

6 голосов
/ 12 сентября 2016

Ответы с упоминанием __str__ и __unicode__ методов верны.Однако, как указано в документах , начиная с версии 1.6 (я думаю), вы можете использовать декоратор python_2_unicode_compatible для и Python 2 и Python 3:

from __future__ import unicode_literals
from django.utils.encoding import python_2_unicode_compatible

@python_2_unicode_compatible
class MyClass(models.Model):
    def __str__(self):
        return "Instance of my class"

Вы также можете использовать вышеперечисленное в объектах, отличных от Model.

3 голосов
/ 04 августа 2014

Вам нужно определить, какой столбец вы хотите отобразить ...

например:

class POAdmin(admin.ModelAdmin):
    list_display = ('qty', 'cost', 'total')
2 голосов
/ 18 февраля 2012

Вы правы, думая, что __unicode__ делает это. У меня это работает прямо сейчас:

class Film(models.Model):
    title = models.CharField(max_length=200)
    ...
    def __unicode__(self):
        return self.title

Когда я просматриваю список недавних действий, я вижу название фильма, который я только что отредактировал.

0 голосов
/ 08 декабря 2018

Это будет работать, используя def str (self): который возвращает self.title

class Blog(models.Model): title = models.CharField(max_length=200) def __str__(self): return self.title

0 голосов
/ 18 октября 2018

Поскольку этому вопросу 6 лет, многое изменилось. Позвольте мне обновить его. С python3.6 и последней версией Django (2.1.2) вы всегда должны использовать __str__() в новом коде. __unicode__() - старая история для python2.7, потому что в python3 str - это unicode.

...