如何自定义 Django 管理面板模型列?姜戈

how to customize django admin panel model columns? django

我所说的自定义并不是指使用 list_display 之类的东西。

我自定义的意思是我想要一个模型中没有的列。

我的想法是,我想创建一个名为下载的列,但模型中没有名为下载的属性。这只是一个 url,我想自定义自己,它会显示在每一行中。

一个简单的例子就是其中一个随机模型的管理页面中的类似内容。 假设这是我的 Employee 模型。 在我的管理页面中,它会显示员工的姓名,在右侧我想自己创建一个下载 url 来导出用户信息。我已经准备好导出代码并且 url 也准备好了,但我不确定如何在管理页面中自定义它。

Model Employee
-------------------------------
name            | download
-------------------------------
Goerge          | download
Fluffy          | download
Techy           | download

有人知道如何做到这一点吗?

提前致谢

from django.utils.html import format_html

class EmployeeAdmin(ModelAdmin):
    list_display = ('download', )

    def download(self, obj):
        return format_html('<a href="/your/path/download/{}/">Download</a>', obj.pk)
    download.short_description = 'Download Link'

您可以在 "ModelAdmin" 子类中创建一个函数,为每个条目在结果 table 中呈现自定义内容,例如 answer.

例如,假设您 table 中的 "download" 文本链接到 Google 搜索(“https://www.google.com.au/search?q=test”)。你可以这样做:

from django.contrib import admin

class EmployeeAdmin(admin.ModelAdmin):
    fields = ('name')
    list_display = ('name', 'download')

    def download(self, obj):
        return '<a href=https://www.google.com.au/search?q="' + obj.name + '">' + obj.name + '</a>'

    download.allow_tags = True