答案 0 :(得分:6)
经过大量的挖掘,我成功完成了这项工作。不幸的是,我无法找到我使用的来源(太多标签,太多没有工作......)。所以我的想法是创建一个Image Widget,它附加一些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}}
答案 1 :(得分:1)
接着,对@shaniqwa回答,django(2.2.7)现在需要render()中的渲染器,
class AdminImageWidget(AdminFileWidget):
def render(self, name, value, attrs=None, renderer=None):
output = []
if value and getattr(value, "url", None):
image_url = value.url
file_name = str(value)
output.append(
f' <a href="{image_url}" target="_blank">'
f' <img src="{image_url}" alt="{file_name}" width="150" height="150" '
f'style="object-fit: cover;"/> </a>')
output.append(super(AdminFileWidget, self).render(name, value, attrs, renderer))
return mark_safe(u''.join(output))
class ProductImagesAdmin(admin.TabularInline):
model = ProductImages
extra = 1
formfield_overrides = {
models.ImageField: {'widget': AdminImageWidget}
}
答案 2 :(得分:0)
这是可能的。我刚才做过这样的事情。不幸的是,我再也找不到代码了。要更改django管理员中的表示,您必须覆盖正在使用的默认管理模板。 docs
答案 3 :(得分:0)
您需要向model.py添加方法:
def thumbnail(self):
return u'<img src="%s" />' % (self.image.url)
thumbnail.short_description = 'Thumbnail'
然后在admin.py中你要添加:
fields = ( 'thumbnail', )
readonly_fields = ('thumbail',)
那将在那里添加缩略图。
答案 4 :(得分:0)
在Django 3.0中适用于我的简单解决方案:
在models.py中添加:
from django.utils.safestring import mark_safe
def image_preview(self):
if self.image:
return mark_safe('<img src="{0}" width="150" height="150" />'.format(self.image.url))
else:
return '(No image)'
在admin.py中:
class ProductImagesAdmin(admin.TabularInline):
model = ProductImages
readonly_fields = ('image_preview',)
答案 5 :(得分:0)
第一个答案https://stackoverflow.com/a/44051507/2020723的清理版本-已准备好使用Django> 3,python 3.x:
class AdminImageWidget(AdminFileWidget):
"""Admin widget for showing clickable thumbnail of Image file fields"""
def render(self, name, value, attrs=None, renderer=None):
html = super().render(name, value, attrs, renderer)
if value and getattr(value, 'url', None):
html = format_html('<a href="{0}" target="_blank"><img src="{0}" alt="{1}" width="150" height="150" style="object-fit: contain;"/></a>', value.url, str(value)) + html
return html