Skip to main content
 首页 » 编程设计

python之覆盖 django 管理事件日志

2024年10月24日33zhwl

如何覆盖 django 管理主页以隐藏某些事件。

例如:

我不想让管理员看到他在管理主页上创建了哪些用户。我想我可以像这样重写 get_queryset 方法:

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

但是我不知道把管理器放在哪里。

请您参考如下方法:

admin主页日志的queryset由模板标签django.contrib.admin.templatetags.log.get_admin_log定义.

因此您可以通过在 yourapp/templatetags/log.py 中重新定义它来覆盖 log 模板标签库(yourapp 必须在 django.contrib.admin 在你的 INSTALLED_APPS 中,所以你的 log 模板标签库优先于 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