在 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.user
、l.action_time
和l.obj_repr
(obj
的名称)和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的主要内容,如果未能解决你的问题,请参考以下文章