Django admin listview 自定义列名

Posted

技术标签:

【中文标题】Django admin listview 自定义列名【英文标题】:Django admin listview Customize Column Name 【发布时间】:2012-03-31 07:05:28 【问题描述】:

好的,所以我有一个从作者模型构建的自定义 django 管理员:

class AuthorAdmin(admin.ModelAdmin):
    """
    Author Admin
    """
    form = AuthorForm

    list_display = ['profile_photo', 'first_name', 'last_name', 'title']
    search_fields = ['first_name', 'last_name', 'title', 'credential']
    prepopulated_fields = 'slug': ('first_name', 'last_name', 'title')

    def profile_photo(self, obj) :
        return '<img src="%s" title="%s" />' % (resize_image(obj.photo, '100x100'), obj.title)

    profile_photo.allow_tags = True

但在 django 管理列表视图中,自定义列的列标题没有正确的大小写。

有谁知道如何覆盖根据自定义函数名称构建的列标题?

我试过了:

def my_function(self, obj) :
    """My Custom Title"""
    ...

def my_function(self, obj) :
    class Meta:
        verbose_name = _(u"My Custom Title")

【问题讨论】:

你从哪个模块导入resize_image函数? 天哪,这就像 10 岁,可能是缩略图? @artu-hnrq 【参考方案1】:

用途:

class AuthorAdmin(admin.ModelAdmin):
    …
    def my_function(self, obj) :
        """My Custom Title"""
    …
    my_function.short_description = 'This is the Column Name'

它被埋在admin docs 中。 short_description,具体来说,在list_display 的讨论中几乎没有提到(更多的是举例而不是实际调用)。像这样的其他项目类似地隐藏在管理文档中,但这里有一个摘要:

short_description: 要使用的列标题(字符串) allow_tags:顾名思义……让我们使用 htmlTrueFalseadmin_order_field:模型上的一个字段,按(字符串,字段名)对该列进行排序 boolean:表示返回值为布尔值,并指示管理员使用漂亮的图形绿色检查/红色 X(TrueFalse

【讨论】:

效果很好,文档中是否有一些页面可以让我了解有关此功能和其他类似功能的更多信息? 不幸的是,这破坏了按此列排序的可能性 @cxxl 我找到了this【参考方案2】:

Django 3.2 开始,您可以使用 display 装饰器。它具有用于更改列名称的属性description

class AuthorAdmin(admin.ModelAdmin):

    list_display = ['profile_photo', 'first_name', 'last_name', 'title']

    @admin.display(description='Profile Photo')
    def profile_photo(self, obj) :
        return '<img src="%s" title="%s" />' % (resize_image(obj.photo, '100x100'), obj.title)

有关display 装饰器的更多信息,请参阅this page

【讨论】:

【参考方案3】:

在您的 models.py 模型类中,您可以对(通常)任何字段执行以下操作:

your_field = models.CharField(max_length=123456789, verbose_name="WOWYWOWY!!!")

【讨论】:

完全不相关的答案,在管理面板中重命名列与模型中的 verbose_name 无关 在否决答案之前,您是否真的尝试过这个?这为原始问题提供了另一种解决方案。请先检查并重新访问。 是的,兄弟,我昨天试过了,但没有这样工作。 这真的很奇怪。我刚刚仔细检查了它,它工作正常。您确定在更改后进行了迁移吗?在我的 models.py 中有field_name = models.CharField(...., verbose_name='Whatever'),在我的 admin.py 中,我根据需要使用list_display=['field_name',...] 注册了字段。这正是我上面解释的。我在 Django 3.2 上。 我自己在 python3.6 上使用 django 3.2,是的,我应用了迁移,但它没有显示 verbose_name 中指定的标题。 def project_logo_ftn(self, obj): return format_html('&lt;img src="" width="auto" height="200px" /&gt;'.format(obj.project_logo.url)) project_logo_ftn.short_description = 'Project Logo'我用这个方法来显示图片并在admin中设置名称为project Logo

以上是关于Django admin listview 自定义列名的主要内容,如果未能解决你的问题,请参考以下文章

python/django models中自定义用户认证及django admin自定义

python/django models中自定义用户认证及django admin自定义

django-19.admin后台自定义显示

如何在 Django-admin 中添加自定义搜索框?

Django将自定义查询集添加到ListView中

django admin 自定义模板页面未找到错误