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.
 
 

123 lines
4.3 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 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(
'<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, 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)