Django“xxxxxx对象”在管理员操作侧栏中显示自定义

时间:2012-02-17 22:40:22

标签: django django-models django-admin

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

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

我想更改这些在管理员中的命名方式。理想情况下,我希望能够将其从“MyModelName对象”更改为“策略”对象示例中的“策略:{{策略的”策略名称“字段的值。}}。

我当时认为我的患者模型的__unicode__处理了这个问题,但似乎没有。任何帮助表示赞赏。

9 个答案:

答案 0 :(得分:138)

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

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

在Python 3上,您需要使用__str__

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

答案 1 :(得分:25)

使用__str__方法适用于Python3和Django1.8:

class MyModel(models.Model):

    name = models.CharField(max_length=60)

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

答案 2 :(得分:13)

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

答案 3 :(得分:6)

提及__str____unicode__方法的答案是正确的。然而,正如docs中所述,从版本1.6(我认为)开始,您可以使用{{1>}装饰器两者 Python 2和Python 3:

python_2_unicode_compatible

您也可以在非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" 对象中使用上述内容。

答案 4 :(得分:3)

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

例如:

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

答案 5 :(得分:2)

你认为__unicode__这样做是对的。我现在正在运行:

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

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

答案 6 :(得分:0)

由于这个问题已有6年历史,所以很多事情都已改变。让我对其进行更新。使用python3.6和最新版本的Django(2.1.2),您应该始终在新代码中使用__str__()__unicode__()是python2.7的古老故事,因为在python3中,strunicode

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

通过向模型__str__()添加Patient方法,如下所示:

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

将显示患者的名称而不是对象。有关详细信息,请检查test out Storage Transfer Service directly in the GCP Console