在 Django 中,如果你想在管理界面中显示历史记录,但仅限于在管理界面中发生的操作,你可以使用 Django 的 LogEntry
模型和自定义的管理命令来实现这一功能。
Django 的 LogEntry
模型用于跟踪模型实例的变化。默认情况下,Django 管理界面会记录对模型实例的所有更改,并在模型的历史记录页面中显示这些更改。
admin.py
文件中,为需要跟踪历史的模型启用历史记录功能。admin.py
文件中,为需要跟踪历史的模型启用历史记录功能。问题:历史记录显示了非管理界面的操作。
原因:可能是由于在其他地方(如视图或脚本)直接修改了模型实例,而没有通过管理界面。
解决方法:
# 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}'))
通过上述步骤,你可以确保历史记录仅显示在管理界面中发生的操作。
领取专属 10元无门槛券
手把手带您无忧上云