简体   繁体   English

覆盖 django 管理员活动日志

[英]Override django admin activity log

How can I override django admin main page in order to hide certain activities.如何覆盖 django 管理主页以隐藏某些活动。

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:我不希望管理员看到他在管理员主页上创建了哪些用户。我想我可以像这样覆盖 get_queryset 方法:

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.但我不知道把管理经理放在哪里。

The queryset of admin main page logs is defined by the template tag django.contrib.admin.templatetags.log.get_admin_log .管理主页日志的查询集由模板标签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).因此,您可以通过在yourapp/templatetags/log.py重新定义log模板标签库来覆盖它(您的应用yourapp必须在INSTALLED_APPS django.contrib.admin之前,以便您的log模板标签库优先于django.contrib.admin的)。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM