Django admin日志记录模块的使用,拓展LogEntry日志记录跳转改动详情页,日志搜索等功能

1、django admin日志记录引入

在使用django admin开发后台管理系统时,可以在admin模块中将django admin自带的操作日志记录模块注册到管理面板
from django.contrib.admin.models import LogEntry

可以看到引入后django admin的菜单栏新增出了一条日志记录的按钮
在这里插入图片描述

这里对应的数据,就是django初始化时创建的django_admin_log

在这里插入图片描述

2、问题引入

但是这个界面我们可以看到,单数据库中发生了数据变动(修改,新增,更新)时,会自动写入数据到日志记录中,但是目前这个界面无法跳转到修改的详情页,当模块偏多时,在运维时就无法定位到具体的修改位置。因此,为了实现能够通过日志记录跳转到改动详情,我们需要继承LogEntry类,并增加函数。

3、解决方案

3.1实现思路

我们通过观察django_admin_log表可以看到有两个关键字段,一个是object_id,一个是content_type_id
其中content_type_id与django表django_content_type的id关联。

通过表中的{app_label}_{model}的形式可以找到对应的数据库表,再通过object_id即可找到对应的修改字段了
在这里插入图片描述

3.2拓展LogEntry,新增跳转详情链接

在admin.py中新增代码,继承LogEntry,新定义一个view_link方法表示我们的跳转链接。对于更新或者新增操作添加一列跳转按钮,通过django_content_type表中的app_label和model字段构建跳转链接,拼接出一个a标签进来返回。最后加入到list_display属性中,就能在界面最后看到一个view的跳转按钮了。点击跳转到对应的数据详情页。 于是同时,还得保留权限校验,确保只有有权限的用户才能跳转。

from django.contrib import admin
from django.contrib.admin.models import LogEntry
from django.utils.html import format_html
from django.urls import reverse
@admin.register(LogEntry)
class LogOperateAdmin(admin.ModelAdmin):
    list_display = ('action_time', 'content_type', 'user','get_edited_object', '__str__')

    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        return False

    def view_link(self, obj):
        if obj.action_flag != 3 and obj.object_id:
            ct = obj.content_type
            view_url = reverse('admin:%s_%s_change' % (ct.app_label, ct.model), args=[obj.object_id])
            return format_html('<a href="{}">View</a>', view_url)
        return ""
    
    list_display += ('view_link',)

在这里插入图片描述

3.3拓展LogEntry,支持日志记录的搜索

接下来加入搜索其实就是django admin的相对通用的操作了,添加search_fields,添加时间范围过滤搜索等

from django.utils.translation import gettext_lazy as _
from django.contrib.admin import DateFieldListFilter

class CustomDateRangeFilter(DateFieldListFilter):
    title = _('时间范围')

    def __init__(self, *args, **kwargs):
        super(CustomDateRangeFilter, self).__init__(*args, **kwargs)

@admin.register(LogEntry)
class LogOperateAdmin(admin.ModelAdmin):
    list_display = ('action_time', 'content_type', 'user','get_edited_object', '__str__')
    list_filter = (('action_time', CustomDateRangeFilter), 'content_type')  # 添加自定义时间范围过滤器和 content_type 下拉框
    search_fields = ('object_id', 'object_repr')  # 添加对其他字段的搜索支持
    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        return False

    def view_link(self, obj):
        if obj.action_flag != 3 and obj.object_id:
            ct = obj.content_type
            view_url = reverse('admin:%s_%s_change' % (ct.app_label, ct.model), args=[obj.object_id])
            return format_html('<a href="{}">View</a>', view_url)
        return ""
    
    list_display += ('view_link',)

在这里插入图片描述

结束

需要获取源码的可以关注公众号"一颗程序树",点击菜单栏的免费源码-源码集合的页面中输入关键词。或者菜单栏点击“联系我们”按钮咨询问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/529178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT windeployqt打包出现无法正常启动问题

QT 通过windeployqt 打包后出现的问题 原因QT构建选择的是64位的 但是windows下运行的却是32位的 步骤打开32的所在路径 一般在上一级目录会有安装好的64位的MSVC工具 运行打包即可

秋招复习笔记——八股文部分:操作系统

笔试得刷算法题&#xff0c;那面试就离不开八股文&#xff0c;所以特地对着小林coding的图解八股文系列记一下笔记。 这一篇笔记是图解系统的内容。 硬件结构 CPU执行程序 计算机基本结构为 5 个部分&#xff0c;分别是运算器、控制器、存储器、输入设备、输出设备&#xf…

梵宁教育课程深度解析:设计技能提升,从这里开始

在当今数字化快速发展的时代&#xff0c;设计技能已成为个人职业发展的重要一环。无论是从事广告、媒体、UI设计还是其他相关领域&#xff0c;拥有扎实的设计技能都意味着拥有了更多的职业机会和发展空间。梵宁教育&#xff0c;作为业界知名的教育机构&#xff0c;以其专业的课…

4.9作业

1、完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…

推进数智化财务管理体系,助力企业降本提效

在数字经济快速发展的今天&#xff0c;数字化能力早已成为企业发展的核心竞争力。在开放、融合的数字经济大背景下&#xff0c;企业该如何将科技深度赋能业务&#xff0c;打造出高质量发展的新引擎&#xff1f;当财务管理缺乏精准化、精确化、及时性的问题逐渐显露&#xff0c;…

关于51单片机TMOD定时器的安全配置

定时器介绍&#xff1a; -------------------------------------------------------------------------------------------------------------------------- 首先配置的是控制寄存器 TCON 说直白点&#xff0c;这个寄存器就是用来计数的&#xff0c;打开计时器&#xff0c;关…

基于51单片机轮胎胎压监测系统—数码管显示

基于51单片机轮胎胎压监测系统 &#xff08;仿真&#xff0b;程序&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.MPX4115压力传感器胎压检测&#xff1b; 2.ADC0832进行模数转换后&#xff0c;51单片机处理控制&#xff1b; 3.数码管显示胎压&#xff…

ST Motor Control Workbench生成工程报错PDSC version is not supported解决办法

文章目录 前言一、报错相关信息二、解决办法 前言 使用 ST Motor Control Workbench 5.4.4 FOC 电机开发工具和 stm32cubemx 6.1.1 生成的工程报错&#xff0c;记录一下解决的办法。 一、报错相关信息 报错信息如下&#xff1a; 2024-04-09 18:35:28,527 ERROR [LineInfo_to…

【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化

CRM系统 CRM&#xff08;Customer Relationship Management&#xff0c;客户关系管理&#xff09;系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中&#xff0c;CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。本文将…

FME学习之旅---day21

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;AutoCAD 变换 相关的文章 为您的 DWG 赋予一些样式&#xff1a;使用 DWGStyler、模板文件、块等 FME数据检查器在显示行的方式上受到限制。它只能显示线条颜色&#xff0c;而…

一文讲清如何用BI进行商品分析之返货品画像分析

01 什么是商品画像&#xff0c;怎样进行商品分析 “用户画像对于小伙伴们来说并不陌生&#xff0c;那有小伙伴知道商品画像吗&#xff1f;其实它和用户画像一样&#xff0c;可以简单理解成是商品海量数据的标签。” 商品画像的意义在于可以对商品进行精准的定位&#xff0c;让…

Linux初学(十七)防火墙

一、防火墙简介 1.1 防火墙的类别 安全产品 杀毒&#xff1a; 针对病毒&#xff0c;特征篡改系统中的文件杀毒软件针对处理病毒程序防火墙&#xff1a; 针对木马&#xff0c;特征系统窃取防火墙针对处理木马 防火墙分为两种 硬件防火墙软件防火墙 硬件防火墙 各个网络安全…

鸿蒙、如何使用@ohos.contact 接口,实现对联系人的增删查改功能

介绍 本示例使用ohos.contact 接口&#xff0c;实现了对联系人的增删查改功能。 效果预览 使用说明 1.点击 按钮&#xff0c;跳转添加联系人界面&#xff0c;输入联系人信息&#xff0c;点击 √&#xff0c;确认添加联系人&#xff0c;并返回首页&#xff1b; 2.点击联系人…

关于阿里云centos系统下宝塔面板部署django/中pip install mysqlclient失败问题的大总结

python版本3.12.0 问题1 解决方案 sudo vim /etc/profile export MYSQLCLIENT_CFLAGS"-I/usr/include/mysql" export MYSQLCLIENT_LDFLAGS"-L/usr/lib64/mysql" Esc退出编辑模式 &#xff1a;wq退出并且保存 问题二 说是找不到 mysql.h头文件 CentOS ‘…

【Linux】进程的状态(运行、阻塞、挂起)详解,揭开孤儿进程和僵尸进程的面纱,一篇文章万字讲透!!!!进程的学习②

目录 1.进程排队 时间片 时间片的分配 结构体内存对齐 偏移量补充 对齐规则 为什么会有对齐 2.操作系统学科层面对进程状态的理解 2.1进程的状态理解 ①我们说所谓的状态就是一个整型变量&#xff0c;是task_struct中的一个整型变量 ②.状态决定了接下来的动作 2.2运行状态 2.…

常见的mq产品和优点

常见的mq产品和优点 一、什么是mq? MQ全称 Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信&#xff0c;解耦。 二、常见的mq产品 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq …

在家学机器人技术指南

机器人技术是一个跨学科的领域&#xff0c;涉及计算机科学、电子工程、机械工程、人工智能等多个方面。在家自学机器人技术是完全可能的&#xff0c;但需要有计划和系统的学习路径&#xff0c;以及对相关领域的基础知识有一定的了解。 以下是一些建议&#xff0c;可以帮助你在家…

ES 大数据量按照日期分索引存储和查询

前言 ES 通常被用来存放各种日志数据或其他大批量数据&#xff0c;然后做统计。 对于请求量大的系统来说&#xff0c;日志或其他业务数据无比庞大&#xff0c;需要按日期来划分索引&#xff0c;便于做冷热数据的迁移管理。大批量的业务数据也要根据日期来区分&#xff0c;提高…

冒泡排序解读

在信息爆炸的时代&#xff0c;数据无处不在&#xff0c;而如何有效地管理和处理这些数据&#xff0c;成为了现代计算机科学的一个重要课题。排序算法&#xff0c;作为数据处理的基本工具之一&#xff0c;对于数据的组织、搜索和分析起着至关重要的作用。今天&#xff0c;我们就…

淘宝销量API商品详情页原数据APP接口测试㊣

淘宝/天猫获得淘宝app商品详情原数据 API 返回值说明 item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地…