如何覆盖 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
