sync from local backup
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user