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 django import forms from dj_language.models import Language from filer.models.thumbnailoptionmodels import ThumbnailOption # from filer.admin.thumbnailoptionmodels import ThumbnailOptionAdmin as OriginalThumbnailOptionAdmin from .models import Comment, AppVersion 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, dovoodi_admin_site project_admin_site.register(ThumbnailOption, ThumbnailOptionAdmin) dovoodi_admin_site.register(ThumbnailOption, ThumbnailOptionAdmin) class CommentAdminForm(forms.ModelForm): class Meta: model = Comment fields = '__all__' def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 2. Filter the actual database objects instead of hardcoding strings if 'language' in self.fields: self.fields['language'].queryset = Language.objects.filter(code__in=['en', 'ru']) class CommentAdmin(ModelAdmin): form = CommentAdminForm list_display = [ 'user_fullname', 'language', 'order', 'created_at', ] search_fields = ['user_fullname', 'comment_text'] list_filter = ['language', 'created_at'] ordering = ['order', '-created_at'] class AppVersionAdmin(ModelAdmin): list_display = [ 'version', 'app_type', 'is_active', 'created_at', ] search_fields = ['version', 'description'] list_filter = ['app_type', 'is_active', 'created_at'] ordering = ['-created_at'] # Register models with both admin sites # project_admin_site.register(Comment, CommentAdmin) project_admin_site.register(AppVersion, AppVersionAdmin) # dovoodi_admin_site.register(Comment, CommentAdmin) dovoodi_admin_site.register(AppVersion, AppVersionAdmin)