Django "xxxxxx Object" настройка отображения в боковой панели действий администратора

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

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

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

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

6 ответов


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

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

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

def __str__(self):
   return 'Policy: ' + self.name

С помощью __str__ метод работает на Python3 и Django1.8:

class MyModel(models.Model):

    name = models.CharField(max_length=60)

    def __str__(self):
        return 'MyModel: {}'.format(self.name)

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


ответы упомянув __str__ и __unicode__ методы являются правильными. Как указано в docs однако, начиная с версии 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"

вы можете использовать выше в non -Model объекты, а также.


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

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

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


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

например:

class POAdmin(admin.ModelAdmin):
    list_display = ('qty', 'cost', 'total')