我想更改管理员最近更改边栏显示添加的“对象”名称的默认行为。请参考下图:
我想更改这些在管理员中的命名方式。理想情况下,我希望能够将其从“MyModelName对象”更改为“策略”对象示例中的“策略:{{策略的”策略名称“字段的值。}}。
我当时认为我的患者模型的__unicode__
处理了这个问题,但似乎没有。任何帮助表示赞赏。
答案 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中,str
是unicode
。
答案 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