from django.contrib import admin, messages from django.db.models import F from django.urls import reverse from django.utils.html import format_html from django.utils.translation import ngettext from .models import Platform, Archive, Ticket from .utils.helpers import sizify class PlatformAdmin(admin.ModelAdmin): list_display = ('id', 'name', 'pretty_name') search_fields = ('name',) class TicketAdmin(admin.ModelAdmin): list_display = ( 'id', 'number', 'token', 'platform', 'user', 'time_create', 'time_update', 'resolved', ) search_fields = ('number',) list_filter = ('platform', 'resolved', 'time_create',) actions = ['make_resolved', 'make_unresolved'] @admin.action(description='Mark selected ticket(s) as resolved') def make_resolved(self, request, queryset): updated = queryset.update(resolved=True) self.message_user( request, ngettext( f'{updated} ticket was successfully marked as resolved.', f'{updated} tickets were successfully marked as resolved.', number=updated, ), messages.SUCCESS, ) @admin.action(description='Mark selected ticket(s) as unresolved') def make_unresolved(self, request, queryset): updated = queryset.update(resolved=False) self.message_user( request, ngettext( f'{updated} ticket was successfully marked as unresolved.', f'{updated} tickets were successfully marked as unresolved.', number=updated, ), messages.SUCCESS, ) class ArchiveAdmin(admin.ModelAdmin): list_display = ( 'id', 'file_link', 'file_size', 'md5', 'ticket', 'time_create' ) search_fields = ('ticket',) list_filter = ('time_create', 'ticket') def get_queryset(self, request): qs = super(ArchiveAdmin, self).get_queryset(request) qs = qs.annotate(file_size=F('size')) return qs def file_size(self, obj): return sizify(obj.size) def file_link(self, obj): if obj.file: file_name = obj.file.name.rpartition('/')[-1] file_path = reverse( 'collector:download', kwargs={'path': obj.file} ) return format_html( '{file_name}', file_path=file_path, file_name=file_name ) else: return "No attachment" file_link.allow_tags = True file_link.short_description = 'File Download' file_size.admin_order_field = 'file_size' admin.site.register(Platform, PlatformAdmin) admin.site.register(Ticket, TicketAdmin) admin.site.register(Archive, ArchiveAdmin) admin.site.site_title = 'Logs Collector' admin.site.site_header = 'LOGS COLLECTOR'