在模型导出操作上添加日志条目

问题描述 投票:0回答:1

我已在 Django 管理中启用日志条目

class CustomLogEntryAdmin(admin.ModelAdmin):
    list_display = [
        "action_time",
        "user",
        "content_type",
        "object_id",
        "object_repr",
        "action_flag",
        "change_message",
    ]
    # list filter
    list_filter = ["action_time", "user", "content_type"]

    # search
    search_fields = ["user__username", "object_repr"]


admin.site.register(LogEntry, CustomLogEntryAdmin)

我有另一个模型,其 admin.py 代码是这样的

class RegAdmin(ExportActionMixin, admin.ModelAdmin):
    resource_class = RegAdminResource

    def has_view_permission(self, request, obj=None):
        return True

    def has_module_permission(self, request):
        return True

默认情况下,所有更改、添加和删除条目都会被记录,但我也想在对其执行任何导出操作时记录条目。 ChatGPT 建议我应该这样做

    # in admin class 
    def export_action(self, request, *args, **kwargs):
        # Log the export action
        LogEntry.objects.create(
            user_id=request.user.id,
            content_type_id=ContentType.objects.get_for_model(self.model).id,
            object_id=None,
            object_repr=str(self.model),
            action_flag=1,  # Assuming 1 stands for the action flag of 'change'
            change_message="Export action triggered.",
        )
        return super().export_action(request, *args, **kwargs)

但是执行导出操作时不会触发此功能。我通过添加打印语句进行确认。

我该怎么做?任何帮助将不胜感激。

python django import export-to-csv openai-api
1个回答
0
投票

你已经非常接近了,唯一的问题是操作引用了

ExportActionMixin
中定义的操作,所以你可以重写你想要的任何内容,它不会引用你的方法。但是,您可以覆盖它以获得正确的操作,因此:

from django.utils.translation import gettext as _


class RegAdmin(ExportActionMixin, admin.ModelAdmin):
    # …
    
    def get_actions(self, request):
        actions = super().get_actions(request)
        actions.update(
            export_admin_action=(
                RegAdmin.export_admin_action,
                'export_admin_action',
                _('Export selected %(verbose_name_plural)s'),
            )
        )
        return actions
© www.soinside.com 2019 - 2024. All rights reserved.