在Django应用中为用户动作添加日志条目

28 投票
2 回答
25137 浏览
提问于 2025-04-17 05:03

我需要为用户通过我的Django应用中的视图对数据库所做的更改创建一个日志记录。

我已经启用了Django的管理模块,并且可以通过管理界面像这样获取更改的日志:

from django.contrib.admin.models import LogEntry
from django.contrib.contenttypes.models import ContentType

recentActions = LogEntry.objects.all()

for each in recentActions:
    print 'Action:', each.action_flag.__str__()
    print 'Message:', each.object_repr
    print 'Table:', ContentType.objects.get(id = each.content_type_id).name

我想为其他用户在我的Django应用中通过视图执行的操作创建类似的日志记录。我该怎么做呢?

2 个回答

1

如果你需要在ModelAdmin的方法里面记录日志(而不是在视图中),你可以使用一些内置的方法:log_addition()log_change()log_deletion()。想了解更多,可以看看这个回答 https://stackoverflow.com/a/56705189/14429896

54

你已经很接近了。你只需要创建新的 LogEntry 对象并保存它们。 LogEntryobjects 上有一个快捷功能可以完成这个操作。

from django.contrib.admin.models import LogEntry, ADDITION, CHANGE

LogEntry.objects.log_action(
            user_id=request.user.id,
            content_type_id=ContentType.objects.get_for_model(model_object).pk,
            object_id=object.id,
            object_repr=unicode(object.title),
            action_flag=ADDITION if create else CHANGE)

撰写回答