在 Django 的管理员上记录活动 - Django

Posted

技术标签:

【中文标题】在 Django 的管理员上记录活动 - Django【英文标题】:Logging activity on Django's admin - Django 【发布时间】:2011-03-10 15:06:10 【问题描述】:

我需要在 Django 管理员上跟踪/记录活动。

我知道管理员在某处存储了一些消息,但我不知道如何访问它们以便将它们用作简单的日志。


我正在尝试跟踪以下内容:

执行操作的用户

已提交操作

行动日期时间

谢谢大家。

【问题讨论】:

以下答案均无效? 我知道为时已晚,但信息共享。 django-simple-history.readthedocs.io/en/2.7.0/… 【参考方案1】:

我不得不做类似的事情,我使用了这样的东西:

from django.contrib.admin.models import LogEntry

logs = LogEntry.objects.all() #or you can filter, etc.
for l in logs:
    #perform action

你可以看到all of the attributes for LogEntry,但我认为你正在寻找的是l.userl.action_timel.obj_reprobj的名称)和l.action_flag 1:'Add',2:'Change',3:'Delete')。希望对您有所帮助!

【讨论】:

【参考方案2】:

日志在 django 使用的数据库中的 django_admin_log 表中。

【讨论】:

谢谢!但是没有创建时间戳,你认为我能以某种方式解决这个问题吗?我正在考虑添加一个带有默认值的 sql 行 您可以在LogEntry 类中使用action_time。看看我的回答, django_admin_log 表只让您知道发生了变化,它不会让您知道更改了哪些值,其次,当使用多种语言时,历史记录只会以英文显示列名,不会更改为根据您的语言环境。最好制作自己的历史记录或使用 django.revision【参考方案3】:

查看LogEntry 类,该类存储管理员内部操作的日志。

您可以像这样使用它在日志中插入自定义条目:

from settings import LOG_SIZE, LOG_THRESHOLD
from django.contrib.admin.models import LogEntry

if not LogEntry._meta.installed:
        raise ImproperlyConfigured("You'll need to put 'django.contrib.admin' in your INSTALLED_APPS setting before you can use the admin application.")

def log_action(user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
        # limit log size
        log_count = LogEntry.objects.count()

        if log_count > LOG_THRESHOLD:
                to_delete = LogEntry.objects.all()[LOG_SIZE:log_count]

                #FIXME (!?): to_delete.delete()
                for d in to_delete:
                        d.delete()

        LogEntry.objects.log_action(user_id, content_type_id, object_id, object_repr, action_flag, change_message)

【讨论】:

以上是关于在 Django 的管理员上记录活动 - Django的主要内容,如果未能解决你的问题,请参考以下文章

Django模板语言相关内容 Djan

django搭建个人博客

基于Django实现RBAC权限管理

在 django 中记录用户活动?

使用 sorl 的 django 管理面板中的缩略图

在 django 管理更改列表页面上的每条记录上添加按钮?