首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django -在管理工作中显示历史记录,但仅当操作在管理中发生时才显示

在 Django 中,如果你想在管理界面中显示历史记录,但仅限于在管理界面中发生的操作,你可以使用 Django 的 LogEntry 模型和自定义的管理命令来实现这一功能。

基础概念

Django 的 LogEntry 模型用于跟踪模型实例的变化。默认情况下,Django 管理界面会记录对模型实例的所有更改,并在模型的历史记录页面中显示这些更改。

相关优势

  1. 审计跟踪:可以清楚地看到谁在何时做了什么更改。
  2. 数据完整性:有助于维护数据的完整性和一致性。
  3. 责任归属:便于追踪问题和责任。

类型

  • 创建:记录对象的创建。
  • 更新:记录对象的修改。
  • 删除:记录对象的删除。

应用场景

  • 内容管理系统:跟踪文章、页面等内容的编辑历史。
  • 电子商务平台:跟踪订单状态的变更。
  • 用户管理系统:跟踪用户信息的修改。

实现步骤

  1. 启用历史记录: 在你的 admin.py 文件中,为需要跟踪历史的模型启用历史记录功能。
  2. 启用历史记录: 在你的 admin.py 文件中,为需要跟踪历史的模型启用历史记录功能。
  3. 自定义历史记录: 创建一个自定义的管理命令,用于过滤仅在管理界面中发生的操作。
  4. 自定义历史记录: 创建一个自定义的管理命令,用于过滤仅在管理界面中发生的操作。
  5. 运行自定义命令: 在终端中运行自定义命令来查看过滤后的历史记录。
  6. 运行自定义命令: 在终端中运行自定义命令来查看过滤后的历史记录。

遇到的问题及解决方法

问题:历史记录显示了非管理界面的操作。

原因:可能是由于在其他地方(如视图或脚本)直接修改了模型实例,而没有通过管理界面。

解决方法

  • 确保所有对模型的更改都通过管理界面进行。
  • 在自定义的管理命令中添加逻辑来过滤掉非管理界面的操作。

示例代码

代码语言:txt
复制
# admin.py
from django.contrib import admin
from django.contrib.admin.models import LogEntry
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('field1', 'field2', 'modified_by', 'modified_date')

    def save_model(self, request, obj, form, change):
        if change:
            obj.modified_by = request.user
        super().save_model(request, obj, form, change)

admin.site.register(YourModel, YourModelAdmin)

# management/commands/filter_admin_logs.py
from django.core.management.base import BaseCommand
from django.contrib.admin.models import LogEntry

class Command(BaseCommand):
    help = 'Filter admin log entries'

    def handle(self, *args, **options):
        admin_log_entries = LogEntry.objects.filter(action_flag__in=[1, 2, 3])
        for entry in admin_log_entries:
            self.stdout.write(self.style.SUCCESS(f'{entry.user} - {entry.object_repr} - {entry.action_flag}'))

通过上述步骤,你可以确保历史记录仅显示在管理界面中发生的操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券