Django "xxxxxx Object" display customization in admin action sidebar

我想更改管理员最近更改边栏显示添加的“对象”名称的默认行为。请参考下面的图片:

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

我想改变这些在管理中的命名方式。理想情况下,我希望能够将它从“ MyModelName 对象”更改为类似于“ Policy: { value of the Policy’s“ Policy Name”字段。}.

我在想我的病人模型的 __unicode__可以解决这个问题,但是看起来不是这样的,任何帮助都是值得感激的。

72185 次浏览

你认为 __unicode__能做到这一点是对的。我现在正在运行这个程序:

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

当我查看最近的行动列表时,我看到了我刚编辑的电影的标题。

__unicode__确实做到了这一点。你的模型应该是这样的:

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

在 Python 3上,你需要使用 __str__:

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

正如其他人提到的,您看到的字符串来自 __unicode__方法。但问题是,管理员在创建日志事件时保存了对象的字符串表示形式,因此,如果在保存日志条目之后添加 __unicode__实现,只有在创建了一些新活动之后,才会看到旧条目上的新标题

您需要定义要显示的列..。

例如:

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

Using the __str__ method works on Python3 and Django1.8:

class MyModel(models.Model):


name = models.CharField(max_length=60)


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

The answers mentioning __str__ and __unicode__ methods are correct. As stated in the 医生 however, since version 1.6 (I think), you can use the python_2_unicode_compatible decorator for both Python 2 and 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对象中使用上述内容。

Since this question is 6 years old, a lot of things have changed. Let me make an update to it.With python3.6 and the latest version of Django (2.1.2) you should always use __str__() in new code. __unicode__() is an old story for python2.7 because in python3, str is unicode.

这将工作,使用 def str(self) : 返回 self. title

使用这样的东西:

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

在模型 Patient中加入 __str__()方法:

class Patient(models.Model):
name=models.CharField(max_length=200)
#.........
def __str__(self):
return self.name

will display name of patient instead object. For detail check 给你