首页 > 解决方案 > 在管理员的 __str__ 方法中显示缩略图

问题描述

我有一个Image模型,我通常在__str__方法中显示文件名。我想改为显示图像的缩略图。

这是我的模型:

class Image(models.Model):
    image = models.ImageField(upload_to='images/')

    def filename(self):
        return basename(self.image.name)

    def __str__(self):
        return self.filename()

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-templates

解决方案


您需要修改 àadmin.py' 而不是models.py. 执行以下代码。

在你的models.py

class Image(models.Model):
    image = models.ImageField(upload_to="images/")

在你的admin.py

from PIL import Image
from django.contrib import admin
from django.utils.safestring import mark_safe

class ImageAdmin(admin.ModelAdmin):
    list_display = [
        "thumbnail", "name"
    ]
    list_display_links = [
        "thumbnail"
    ]
    readonly_fields = [
        "thumbnail", "name"
    ]
    fieldsets = [
        ("Details", {
            "fields": ("name", ("image", "thumbnail"))
        }),
    ]

    def thumbnail(self, obj):
        if obj.image:
            return mark_safe(
                '<img src="/media/{url}" width="75" height="auto" >'.format(
                    url=obj.image.url.split("/media/")[-1])
            )

    def name(self, obj):
        name = obj.image.name
        return name.replace('images/', '')

下面,您可以在管理员中看到结果。

在此处输入图像描述

在此处输入图像描述


推荐阅读