Django - 自定义管理操作日志记录

您在Django Admin中所做的所有更改都记录在表djangoadmintable中,您还可以在“最近的操作”中看到最近的更改。 但是,当您编写自己的“管理员操作”并通过它们进行更改时,默认情况下不会记录任何内容。 如自定义action例:

def make_checked(modeladmin, request, queryset):
    queryset.update(checked = 1)
make_checked.short_description = 'Mark selected products as checked'

是否可以记录自定义管理操作,如果可以,如何?

看看管理员的LogEntry模型,更重要的是LogEntryManager 。 模型管理器提供了一个log_action方法,可以很容易地添加自己的日志条目

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

def make_checked(modeladmin, request, queryset):
    queryset.update(checked = 1)

    ct = ContentType.objects.get_for_model(queryset.model)

    for obj in queryset:
        LogEntry.objects.log_action(
            user_id=request.user.id, 
            content_type_id=ct.pk,
            object_id=obj.pk,
            object_repr=obj.description,
            action_flag=CHANGE,
            change_message="You have ...") 
make_checked.short_description = 'Mark selected products as checked'

你可以看到正常的django管理员正在使用的日志记录的一些例子。 如果您只想为整个查询集添加一个LogEntry ,则可以手动完成它(因为上面的log_entry需要一组特定的参数以适应日志记录单个对象):

l = LogEntry(user_id=request.user.id, actions_flag=CHANGE, change_message="...")
l.save()

文档信息

版权声明:可自由转载(请注明转载出处)-非商用-非衍生

发表时间:2023年2月9日 16:50