78 lines
2.7 KiB
Python
78 lines
2.7 KiB
Python
from django.contrib import admin
|
|
from django.utils.translation import gettext_lazy as _
|
|
from .models import ToolCategory, Tool, ToolFavorite, CompressionHistory
|
|
|
|
|
|
@admin.register(ToolCategory)
|
|
class ToolCategoryAdmin(admin.ModelAdmin):
|
|
list_display = ['name', 'icon', 'sort_order', 'tool_count', 'created_at']
|
|
search_fields = ['name']
|
|
ordering = ['sort_order']
|
|
list_editable = ['sort_order']
|
|
|
|
def tool_count(self, obj):
|
|
return obj.tools.count()
|
|
tool_count.short_description = _('Tool Count')
|
|
|
|
|
|
@admin.register(Tool)
|
|
class ToolAdmin(admin.ModelAdmin):
|
|
list_display = ['name', 'category', 'url_path', 'color', 'usage_count', 'is_enabled', 'is_new', 'sort_order', 'created_at']
|
|
list_filter = ['is_enabled', 'is_new', 'category']
|
|
search_fields = ['name', 'description', 'url_path']
|
|
ordering = ['sort_order']
|
|
list_editable = ['is_enabled', 'is_new', 'sort_order', 'color']
|
|
list_per_page = 20
|
|
fieldsets = (
|
|
(_('Basic Information'), {
|
|
'fields': ('name', 'description', 'icon', 'url_path', 'color')
|
|
}),
|
|
(_('Category and Sort'), {
|
|
'fields': ('category', 'sort_order')
|
|
}),
|
|
(_('Status'), {
|
|
'fields': ('is_enabled', 'is_new', 'usage_count')
|
|
}),
|
|
)
|
|
|
|
|
|
@admin.register(ToolFavorite)
|
|
class ToolFavoriteAdmin(admin.ModelAdmin):
|
|
list_display = ['user', 'tool', 'created_at']
|
|
list_filter = ['created_at']
|
|
search_fields = ['user__username', 'tool__name']
|
|
ordering = ['-created_at']
|
|
list_per_page = 30
|
|
readonly_fields = ['created_at']
|
|
|
|
|
|
@admin.register(CompressionHistory)
|
|
class CompressionHistoryAdmin(admin.ModelAdmin):
|
|
list_display = [
|
|
'original_filename', 'user', 'session_id', 'compression_mode',
|
|
'original_format', 'output_format', 'compression_ratio',
|
|
'original_size_display', 'compressed_size_display', 'created_at'
|
|
]
|
|
list_filter = ['compression_mode', 'original_format', 'output_format', 'created_at']
|
|
search_fields = ['original_filename', 'session_id', 'user__username']
|
|
ordering = ['-created_at']
|
|
readonly_fields = ['created_at']
|
|
list_per_page = 20
|
|
|
|
def original_size_display(self, obj):
|
|
return self._format_size(obj.original_size)
|
|
original_size_display.short_description = _('Original Size')
|
|
|
|
def compressed_size_display(self, obj):
|
|
return self._format_size(obj.compressed_size)
|
|
compressed_size_display.short_description = _('Compressed Size')
|
|
|
|
@staticmethod
|
|
def _format_size(size_bytes):
|
|
if size_bytes < 1024:
|
|
return f"{size_bytes} B"
|
|
elif size_bytes < 1024 * 1024:
|
|
return f"{size_bytes / 1024:.1f} KB"
|
|
else:
|
|
return f"{size_bytes / (1024 * 1024):.1f} MB"
|