我想更改管理员最近更改侧边栏如何显示添加的“对象”名称的默认行为。参考下图:
https://i.stack.imgur.com/bvPjO.png
我想更改这些在管理员中的命名方式。理想情况下,我希望能够将其从“MyModelName object”更改为,如“Policy”对象示例中那样,类似于“Policy: {{ value of the policy's "Policy Name" field.}}。
我在想我的 Patient 模型的 __unicode__
处理了这个,但它似乎没有。任何帮助表示赞赏。
__unicode__
确实做到了。粘贴您的代码,以便我们查看问题所在
__unicode__
在 Python 3 中对我不起作用。但是,__str__
确实按照以下答案中的说明工作
__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__
方法。但问题是管理员在创建日志事件时会保存对象的字符串表示形式,因此如果您在保存日志条目后添加 __unicode__
实现,您将不会在旧项目上看到新标题,只有在您创建一些新标题后活动
提到 __str__
和 __unicode__
方法的答案是正确的。但是,如 docs 中所述,从 1.6 版(我认为)开始,您可以将 python_2_unicode_compatible
装饰器用于both 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
对象中使用上述内容。
这将起作用,使用 def str(self): 返回 self.title
使用类似的东西:
class Blog(models.Model):
title = models.CharField(max_length=200)
def __str__(self):
return self.title
您需要定义要显示的列...
例如:
class POAdmin(admin.ModelAdmin):
list_display = ('qty', 'cost', 'total')
您认为 __unicode__
这样做是对的。我现在正在运行:
class Film(models.Model):
title = models.CharField(max_length=200)
...
def __unicode__(self):
return self.title
当我查看最近的动作列表时,我看到了我刚刚编辑的电影的标题。
通过以这种方式将 __str__()
方法添加到模型 Patient
:
class Patient(models.Model):
name=models.CharField(max_length=200)
#.........
def __str__(self):
return self.name
将显示患者姓名而不是对象。详情请查看here
自从这个问题问世 6 年以来,很多事情都发生了变化。让我对其进行更新。使用 python3.6 和最新版本的 Django (2.1.2),您应该始终在新代码中使用 __str__()
。 __unicode__()
是 python2.7 的一个老故事,因为在 python3 中,str
是 unicode
。
不定期副业成功案例分享