From 2888c3bf54f880fa8bfe1dcabd54fd3b2cc9b85b Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 30 Apr 2025 12:34:39 +0200 Subject: [PATCH] Adds LogEntry in the django admin --- tournaments/admin.py | 49 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/tournaments/admin.py b/tournaments/admin.py index e06bb99..2416bc0 100644 --- a/tournaments/admin.py +++ b/tournaments/admin.py @@ -1,7 +1,10 @@ from django.contrib import admin - from django.contrib.auth.admin import UserAdmin from django.utils import timezone +from django.contrib.admin.models import LogEntry, ADDITION, CHANGE, DELETION +from django.utils.html import escape +from django.urls import reverse +from django.utils.safestring import mark_safe from .models import Club, TeamScore, Tournament, CustomUser, Event, Round, GroupStage, Match, TeamRegistration, PlayerRegistration, Purchase, Court, DateInterval, FailedApiCall, Log, DeviceToken, DrawLog, UnregisteredTeam, UnregisteredPlayer from .forms import CustomUserCreationForm, CustomUserChangeForm @@ -154,6 +157,50 @@ class UnregisteredPlayerAdmin(admin.ModelAdmin): list_filter = [] ordering = ['last_name', 'first_name'] + +action_flags = { + ADDITION: 'Addition', + CHANGE: 'Change', + DELETION: 'Deletion', +} + +@admin.register(LogEntry) +class LogEntryAdmin(admin.ModelAdmin): + date_hierarchy = 'action_time' + list_filter = ['user', 'content_type', 'action_flag'] + search_fields = ['object_repr', 'change_message'] + list_display = ['action_time', 'user', 'content_type', 'object_link', 'action_flag_display', 'change_message'] + readonly_fields = [field.name for field in LogEntry._meta.get_fields()] + + def has_add_permission(self, request): + return False + + def has_change_permission(self, request, obj=None): + return False + + def has_delete_permission(self, request, obj=None): + return False + + def object_link(self, obj): + if obj.action_flag == DELETION: + link = escape(obj.object_repr) + else: + ct = obj.content_type + try: + link = '%s' % ( + reverse('admin:%s_%s_change' % (ct.app_label, ct.model), + args=[obj.object_id]), + escape(obj.object_repr), + ) + except: + link = escape(obj.object_repr) + return mark_safe(link) + object_link.short_description = 'Object' + + def action_flag_display(self, obj): + return action_flags.get(obj.action_flag, '') + action_flag_display.short_description = 'Action' + admin.site.register(CustomUser, CustomUserAdmin) admin.site.register(Club, ClubAdmin) admin.site.register(Event, EventAdmin)