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

ltqd579y  于 2023-11-20  发布在  Go
关注(0)|答案(1)|浏览(144)

我已经在Django Admin中启用了日志条目

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


默认情况下,所有更改、添加和删除条目都将被记录,但我也希望在对其执行任何导出操作时记录条目。

# 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)


但是这个函数在执行导出操作时不会被触发。我通过添加一个print语句来确认。
我该怎么做?任何帮助都将不胜感激。

uxhixvfz

uxhixvfz1#

你已经很接近了,唯一的问题是动作引用了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

字符串

更新:我已经打开了一个pull request [GitHub]来修复这个问题。

相关问题