ChatGPT解决这个技术问题 Extra ChatGPT

Django“xxxxxx Object”在管理操作侧边栏中显示自定义

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

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__ 确实按照以下答案中的说明工作

d
dan-klasson

__unicode__ 确实做到了。您的模型应如下所示:

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

在 Python 3 上,您需要使用 __str__

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

我愚蠢地没有注意到我已经为每个模型声明了 unicode 方法,除了这个。 :doh: 对不起。
@patrickn,感谢您 9 年前做出的这个愚蠢的决定。 :)
R
Rob Bednark

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

class MyModel(models.Model):

    name = models.CharField(max_length=60)

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

这也为我解决了。我也使用 Python3 和 Django1.8。
str 是旧方式.....然而 python 3 与 Django,新方式(unicode)不起作用?
D
Dmitry Shevchenko

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


我只是想知道为什么在我设置 unicode 后操作日志没有显示名称 - 我应该知道它只是存储在数据库中的日志,在创建时获取数据!
谢谢,如果你不解释的话会给我带来很大的麻烦
a
alxs

提到 __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 对象中使用上述内容。


c
cdrrr

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

使用类似的东西:

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

z
zho

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

例如:

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

A
Andrew Barrett

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

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

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


I
Ishwor Khanal

通过以这种方式将 __str__() 方法添加到模型 Patient

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

将显示患者姓名而不是对象。详情请查看here


c
cgsdfc

自从这个问题问世 6 年以来,很多事情都发生了变化。让我对其进行更新。使用 python3.6 和最新版本的 Django (2.1.2),您应该始终在新代码中使用 __str__()__unicode__() 是 python2.7 的一个老故事,因为在 python3 中,strunicode