import logging from django.contrib import admin from django.contrib.auth.models import Group from django.urls import reverse from django.utils.html import mark_safe from sorl.thumbnail.admin import AdminImageMixin from sorl.thumbnail.shortcuts import get_thumbnail from core_images.models import FallbackUrl, LabelImage logger = logging.getLogger(__name__) class FallbackUrlAdmin(admin.ModelAdmin): search_fields = ("gras_id", "url") list_display = ("gras_id", "image_preview") list_display_links = ("gras_id", "image_preview") def image_preview(self, instance): return mark_safe(f'') def get_form(self, request, obj=None, change=False, **kwargs): form = super().get_form(request, obj, change, **kwargs) form.base_fields[ "url" ].widget.template_name = "widgets/url_with_image.html" return form class LabelImageAdmin(AdminImageMixin, admin.ModelAdmin): PREVIEW_RESOLUTION = "100x100" search_fields = ("label_id",) list_display = ("label_id", "image_preview") list_display_links = ("label_id", "image_preview") def image_preview(self, instance): try: thumbnail = get_thumbnail( instance.image, self.PREVIEW_RESOLUTION, upscale=False, crop=False, ) url = thumbnail.url except Exception as e: logger.exception(f"Unable to get thumbnail: {e}") url = instance.image.url return mark_safe(f'') admin.site.register(FallbackUrl, FallbackUrlAdmin) admin.site.register(LabelImage, LabelImageAdmin) admin.site.unregister(Group) admin.site.site_header = "Core Images Service" admin.site.site_title = admin.site.site_header admin.site.site_url = reverse("docs")