如何根据模型值在 Django 管理图标中显示

Posted

技术标签:

【中文标题】如何根据模型值在 Django 管理图标中显示【英文标题】:How to show in Django Admin Icons based on model value 【发布时间】:2021-12-08 15:54:23 【问题描述】:

我需要在列表中的 Django Admin 中显示一个图标,并根据该值更改视图。

例如:

如果模型字段 eventId 具有值 1 则显示图标(png 或 webfont)

这可能吗?

型号:

class Events(models.Model):
    eventId = models.CharField(_('EventID'), max_length=254, null=False, blank=False, default='', )
    name = models.CharField(_('EventName'), max_length=254, null=False, blank=False, default='', )
    euuid = models.UUIDField(_('UUID'), default=uuid.uuid4, editable=False, unique=True)
    created = models.DateTimeField(_('Created'), auto_now_add=True, blank=True, help_text=_('Date of the creation'))

【问题讨论】:

你能详细说明你想在哪里显示图标吗?你能分享一下管理员和模型代码吗? @AjayLingayat 我更新了我的问题。该图标应该在列表上的 django 管理后端可见,并更改对象的视图。 (127.0.0.1:8000/admin)。 您可以在list_display 中添加图标,方法是创建一个可以返回格式化的html 字符串的函数,以根据字段的值显示图标。您可以参考realpython.com/customize-django-admin-python/… 了解如何自定义管理模板。 【参考方案1】:

您创建一个类似 icon() 的方法并将其添加到 list_display、fields 并使其为只读。

from django.utils.html import format_html

class EventsAdmin(admin.ModelAdmin):
    ...
    ...

    list_display = ['your_list_display_fields', 'icon']

    fields = ['your_model_fields_for_form', 'icon']

    readonly_fields = ['icon']

    def icon(self, obj):
        if obj.eventId == 1:
            icon_url = '<your_icon_url>'     # get icon url 
            return format_html('<img src="">', icon_url)
        return None

【讨论】:

以上是关于如何根据模型值在 Django 管理图标中显示的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 管理控制台中显示属性的勾号和十字图标

在 django 管理模型列表中,为方法的返回值显示“是/否”

如何在自定义模板中使用 Django 的管理员布尔图标?

同一模型的多个版本的 django 管理页面

Django管理图标和图像

在 Django 的管理界面中很好地显示日期