Files
keywarden/app/apps/audit/admin.py
2025-11-11 15:51:54 +00:00

92 lines
2.0 KiB
Python

from django.contrib import admin
from unfold.admin import ModelAdmin
from unfold.decorators import action # type: ignore
from .models import AuditEventType, AuditLog
@admin.register(AuditEventType)
class AuditEventTypeAdmin(ModelAdmin):
list_display = ("key", "title", "default_severity", "created_at")
search_fields = ("key", "title", "description")
list_filter = ("default_severity",)
ordering = ("key",)
compressed_fields = True
@admin.register(AuditLog)
class AuditLogAdmin(ModelAdmin):
date_hierarchy = "created_at"
list_display = (
"created_at",
"severity",
"event_type",
"actor",
"object_repr",
"source",
"ip_address",
)
list_filter = (
"severity",
"source",
"event_type",
("actor", admin.RelatedOnlyFieldListFilter),
"created_at",
)
search_fields = (
"message",
"object_repr",
"ip_address",
"user_agent",
"request_id",
"metadata",
"actor__username",
"actor__email",
)
readonly_fields = (
"created_at",
"actor",
"event_type",
"message",
"severity",
"source",
"target_content_type",
"target_object_id",
"object_repr",
"ip_address",
"user_agent",
"request_id",
"metadata",
)
compressed_fields = True
list_per_page = 50
fieldsets = (
(
None,
{
"fields": (
"created_at",
"event_type",
"severity",
"message",
"source",
)
},
),
(
"Actor",
{"fields": ("actor", "ip_address", "user_agent", "request_id")},
),
(
"Target",
{"fields": ("target_content_type", "target_object_id", "object_repr")},
),
(
"Metadata",
{"fields": ("metadata",)},
),
)