【问题标题】:Django "xxxxxx Object" display customization in admin action sidebarDjango“xxxxxx Object”在管理操作侧边栏中显示自定义
【发布时间】:2012-03-09 08:06:09
【问题描述】:

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

我想更改这些在管理员中的命名方式。理想情况下,我希望能够将其从“MyModelName 对象”更改为,如“Policy”对象示例中那样,类似于“Policy: {{ value of the policy's "Policy Name" field. }}.

我以为我的 Patient 模型的 __unicode__ 处理了这个问题,但似乎没有。感谢您提供任何帮助。

【问题讨论】:

  • __unicode__ 确实做到了。粘贴您的代码,以便我们查看问题所在
  • __unicode__ 在 Python 3 中对我不起作用。但是,__str__ 确实按照以下答案中的说明工作

标签: django django-models django-admin


【解决方案1】:

__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 年前做出的这个愚蠢决定。 :)
【解决方案2】:

使用__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)不起作用?跨度>
【解决方案3】:

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

【讨论】:

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

提到__str____unicode__ 方法的答案是正确的。但是,正如docs 中所述,从 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"

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

【讨论】:

    【解决方案5】:

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

    使用类似的东西:

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

    【讨论】:

      【解决方案6】:

      您需要定义,要显示哪一列...

      例如:

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

      【讨论】:

        【解决方案7】:

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

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

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-01-10
              • 1970-01-01
              • 2015-05-15
              相关资源
              最近更新 更多