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

pat*_*ckn 93 django django-models django-admin

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

在最近的actions模块中,它还将新对象显示为

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

我以为__unicode__我的病人模型处理了这个问题,但似乎没有.任何帮助表示赞赏.

dan*_*son 151

__unicode__做到了.你的模型应该是这样的:

class SomeModel(models.Model):
    def __unicode__(self):
       return 'Policy: ' + self.name
Run Code Online (Sandbox Code Playgroud)

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

def __str__(self):
   return 'Policy: ' + self.name
Run Code Online (Sandbox Code Playgroud)

  • @patrickn,感谢您 9 年前做出的这个愚蠢决定。:) (2认同)

Adi*_*ana 26

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

class MyModel(models.Model):

    name = models.CharField(max_length=60)

    def __str__(self):
        return 'MyModel: {}'.format(self.name)
Run Code Online (Sandbox Code Playgroud)

  • 这也解决了我.我也使用Python3和Django1.8. (3认同)

Dmi*_*nko 13

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

  • 谢谢你,如果你没有解释,那会给我一个很大的麻烦 (2认同)

alx*_*lxs 7

这些问题的答案提__str____unicode__方法是正确的.正如所陈述的文档,但是由于1.6版(我认为),你可以使用python_2_unicode_compatible装饰商的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"
Run Code Online (Sandbox Code Playgroud)

您也可以在非Model对象中使用上述内容.


Vis*_* D. 6

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

使用类似的东西:

class Blog(models.Model):
    title = models.CharField(max_length=200)
    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)