我已在 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)
但是执行导出操作时不会触发此功能。我通过添加打印语句进行确认。
我该怎么做?任何帮助将不胜感激。
你已经非常接近了,唯一的问题是操作引用了
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