我正在尝试在 Django Admin 的“更改列表”页面中显示内联上传的图像:
下面是我的代码:
# "models.py"
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=50)
price = models.DecimalField(decimal_places=2, max_digits=5)
def __str__(self):
return self.name
class ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
image = models.ImageField()
def __str__(self):
return self.image.url
# "admin.py"
from django.contrib import admin
from .models import Product
class ProductImageInline(admin.TabularInline):
model = ProductImage
@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
inlines = (ProductImageInline,)
那么,如何在 Django Admin 的“更改”页面中显示内联上传的图像?
经过大量挖掘,我设法做到了。不幸的是我找不到我使用的来源(选项卡太多,太多都不起作用..)。所以我的想法是创建一个图像小部件,附加一些 html 脚本。
from django.contrib.admin.widgets import AdminFileWidget
class AdminImageWidget(AdminFileWidget):
def render(self, name, value, attrs=None):
output = []
if value and getattr(value, "url", None):
image_url = value.url
file_name = str(value)
output.append(u' <a href="%s" target="_blank"><img src="%s" alt="%s" width="150" height="150" style="object-fit: cover;"/></a> %s ' % \
(image_url, image_url, file_name, _('')))
output.append(super(AdminFileWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))
class CollectionImageInline(admin.TabularInline):
formfield_overrides = {models.ImageField: {'widget': AdminImageWidget}}
结果:(不管这个问题,我都将管理主题更改为默认主题)
我是一名优秀的程序员,十分优秀!