Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override django admin activity log

How can I override django admin main page in order to hide certain activities.

For example:

I don't want the admin to see which users he created on the admin main page.I'm thinking I could override the get_queryset method like this:

class ActiveLogManager(models.Manager):

    get_queryset():
        entries = LogEntry.objects.exclude(content_type=4, action_flag=1)
        return entries

But I don't know where to place the admin manager.

like image 478
Gustavo Reyes Avatar asked Oct 19 '25 02:10

Gustavo Reyes


1 Answers

The queryset of admin main page logs is defined by the template tag django.contrib.admin.templatetags.log.get_admin_log.

So you can override the log template tags library by redefining it in yourapp/templatetags/log.py (yourapp must be before django.contrib.admin in your INSTALLED_APPS, so that your log template tags library takes the precedence over django.contrib.admin's).

from django.contrib.admin.templatetags.log import *  # noqa

def __AdminLogNode_render(self, context):
    if self.user is None:
        entries = LogEntry.objects.all()
    else:
        user_id = self.user
        if not user_id.isdigit():
            user_id = context[self.user].pk
        entries = LogEntry.objects.filter(user__pk=user_id)
    entries = entries.exclude(content_type=4, action_flag=1)
    context[self.varname] = entries.select_related('content_type', 'user')[:int(self.limit)]
    return ''
__AdminLogNode_render.__name__ = 'render'

AdminLogNode.render = __AdminLogNode_render
like image 87
Antoine Pinsard Avatar answered Oct 21 '25 16:10

Antoine Pinsard



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!