Show ImageField thumbnails in Django Admin ¶
file model.py
class MyModel(BaseModel): my_image = models.ImageField(null=True, blank=True, upload_to=...)
file admin.py
from django.contrib import admin from imagekit.admin import AdminThumbnail from .widgets import AdminImageWidget @admin.register(MyModel) class MyModelAdmin(admin.ModelAdmin): # (1) Show thumbnail in changelist list_display = [..., 'my_image_thumbnail', ] my_image_thumbnail = AdminThumbnail(image_field='my_image') my_image_thumbnail.short_description = 'Thumbnail' # (2) Show thumbnail in changeview def formfield_for_dbfield(self, db_field, **kwargs): if db_field.name == 'my_image': # remove request to avoid "__init__() got an unexpected keyword argument 'request'" error kwargs.pop("request", None) kwargs['widget'] = AdminImageWidget return db_field.formfield(**kwargs) return super(MyModelAdmin,self).formfield_for_dbfield(db_field, **kwargs)
where AdminImageWidget is defined in file widgets.py:
from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ from django.contrib.admin.widgets import AdminFileWidget # http://www.psychicorigami.com/2009/06/20/django-simple-admin-imagefield-thumbnail/ 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" /></a> %s ' % \ (image_url, image_url, file_name, _('Change:'))) output.append(super(AdminFileWidget, self).render(name, value, attrs)) return mark_safe(u''.join(output))