from functools import cached_property from django.contrib import admin from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ from auditlog.filters import CIDFilter, ResourceTypeFilter from auditlog.mixins import LogEntryAdminMixin from auditlog.models import LogEntry @admin.register(LogEntry) class LogEntryAdmin(admin.ModelAdmin, LogEntryAdminMixin): date_hierarchy = "timestamp" list_select_related = ["content_type", "actor"] list_display = [ "created", "resource_url", "action", "msg_short", "user_url", "cid_url", ] search_fields = [ "timestamp", "object_repr", "changes", "actor__first_name", "actor__last_name", f"actor__{get_user_model().USERNAME_FIELD}", ] list_filter = ["action", ResourceTypeFilter, CIDFilter] readonly_fields = ["created", "resource_url", "action", "user_url", "msg"] fieldsets = [ (None, {"fields": ["created", "user_url", "resource_url", "cid"]}), (_("Changes"), {"fields": ["action", "msg"]}), ] def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): return False @cached_property def _own_url_names(self): return [pattern.name for pattern in self.urls if pattern.name] def has_delete_permission(self, request, obj=None): if ( request.resolver_match and request.resolver_match.url_name not in self._own_url_names ): # only allow cascade delete to satisfy delete_related flag return super().has_delete_permission(request, obj) return False def get_queryset(self, request): self.request = request return super().get_queryset(request=request)