You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.9 KiB
75 lines
2.9 KiB
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(
|
|
'<div style="width:{}%; height:{}px; background-color:#e0e0e0; border:1px solid #ccc; display:flex; align-items:center; justify-content:center;">'
|
|
'<span style="font-size:10px; color:#666;">{} × {}</span>'
|
|
'</div>',
|
|
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)
|