如何覆盖 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
关于python - 覆盖 django 管理事件日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36066851/