from django.contrib import admin from django.utils.translation import gettext_lazy as _ from unfold.admin import ModelAdmin from unfold.decorators import display from django.utils.html import format_html from filer.models.thumbnailoptionmodels import ThumbnailOption # from filer.admin.thumbnailoptionmodels import ThumbnailOptionAdmin as OriginalThumbnailOptionAdmin admin.site.unregister(ThumbnailOption) @admin.register(ThumbnailOption) class ThumbnailOptionAdmin(ModelAdmin): list_display = ['name', 'dimensions_display', 'crop', 'upscale', 'preview'] list_filter = ['crop', 'upscale'] search_fields = ['name'] fieldsets = ( (None, { 'fields': ('name', 'width', 'height', 'crop', 'upscale'), 'classes': ('unfold-fieldset',), }), ) @display(description=_("Dimensions")) def dimensions_display(self, obj): return f"{obj.width} × {obj.height}" @display(description=_("Preview")) def preview(self, obj): # ایجاد یک نمایش بصری از ابعاد تصویر بندانگشتی width_percent = min(100, obj.width / 10) # محدود کردن عرض به حداکثر 100% height_px = min(50, obj.height / 5) # محدود کردن ارتفاع به حداکثر 50px return format_html( '
' '{} × {}' '
', width_percent, height_px, obj.width, obj.height ) # اضافه کردن فیلتر سلسله مراتبی برای نام def changelist_view(self, request, extra_context=None): # گرفتن حرف اول از پارامتر URL first_letter = request.GET.get('first_letter', '') # ایجاد لیست حروف الفبا alphabet = [chr(i) for i in range(ord('A'), ord('Z')+1)] # اضافه کردن به context if extra_context is None: extra_context = {} extra_context['alphabet'] = alphabet extra_context['selected_letter'] = first_letter # اعمال فیلتر به queryset اگر حرف انتخاب شده باشد if first_letter: original_get_queryset = self.get_queryset def filtered_queryset(request): qs = original_get_queryset(request) if first_letter == '0-9': return qs.filter(name__regex=r'^[0-9]') return qs.filter(name__istartswith=first_letter) self.get_queryset = filtered_queryset return super().changelist_view(request, extra_context=extra_context) from utils.admin import project_admin_site project_admin_site.register(ThumbnailOption, ThumbnailOptionAdmin)