diff --git a/api/admin.py b/api/admin.py index 8c38f3f..428fa50 100644 --- a/api/admin.py +++ b/api/admin.py @@ -1,3 +1,55 @@ from django.contrib import admin +from django.contrib.admin.models import LogEntry, DELETION +from django.utils.html import escape +from django.utils.safestring import mark_safe +from django.urls import reverse +from .models import api -# Register your models here. + +@admin.register(LogEntry) +class LogEntryAdmin(admin.ModelAdmin): + # to have a date-based drilldown navigation in the admin page + date_hierarchy = 'action_time' + + # to filter the resultes by users, content types and action flags + list_filter = ['user', 'content_type', 'action_flag'] + + # when searching the user will be able to search in both object_repr and change_message + search_fields = ["object_repr", "change_message"] + + list_display = [ + "action_time", + "user", + "content_type", + "action_flag", + "object_link", + ] + + 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 has_view_permission(self, request, obj=None): + return request.user.is_staff + + def object_link(self, obj): + if obj.action_flag == DELETION: + link = escape(obj.object_repr) + else: + ct = obj.content_type + link = '%s' % ( + reverse( + "admin:%s_%s_change" % (ct.app_label, ct.model), + args=[obj.object_id], + ), + escape(obj.object_repr), + ) + return mark_safe(link) + + object_link.admin_order_field = "object_repr" + object_link.short_description = "object"