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
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)
|