from django.contrib import admin from django.utils.html import format_html from .models import TbHypn0Item, TbVote, TbBlogPost @admin.register(TbHypn0Item) class TbHypn0ItemAdmin(admin.ModelAdmin): """ Панель управления гипно-картинами (модерация, просмотр статистики, редактирование). Создание новых картин через админку заблокировано (создание только на фронтенде). """ list_display = ( "id", "s_hash_id", "title_preview", "i_level", "i_likes_count", "i_claims_count", "i_views_count", "f_score", "is_public", "d_created_at", ) list_display_links = ("id", "s_hash_id", "title_preview") list_filter = ("i_level", "is_public", "d_created_at") search_fields = ("s_hash_id", "s_title", "s_promo_title", "s_promo_url") readonly_fields = ( "id", "s_hash_id", "i_file_size", "i_likes_count", "i_views_count", "i_claims_count", "i_promo_clicks", "d_created_at", "d_updated_at", "svg_preview", ) fieldsets = ( ( "Основная информация", { "fields": ( "id", "s_hash_id", "s_title", "file_svg", "svg_preview", "i_file_size", "is_public", ) }, ), ( "Модерация и Smart Retention", { "fields": ( "i_level", "f_score", ), "description": "Уровень модерации и рейтинг 'гравитации' для ротации и очистки хранилища.", }, ), ( "Метрики популярности", { "fields": ( "i_likes_count", "i_claims_count", "i_views_count", ), }, ), ( "Промо-блок (Спонсоры и Авторы)", { "fields": ( "s_promo_url", "s_promo_title", "i_promo_clicks", ), "classes": ("collapse",), }, ), ( "Метаданные генерации", { "fields": ("j_metadata",), "classes": ("collapse",), }, ), ( "Временные метки", { "fields": ("d_created_at", "d_updated_at"), "classes": ("collapse",), }, ), ) def has_add_permission(self, request): # Создание картин возможно только с фронтенда (требуется обработка растра и согласие пользователя) return False @admin.display(description="Название (HTML)") def title_preview(self, obj): return format_html(obj.s_title) @admin.display(description="Превью SVG") def svg_preview(self, obj): if obj.file_svg: return format_html( '