⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

模型数据版本控制与审计日志:回溯任意历史快照

构建一个无侵入的混入类,自动记录每个模型实例的创建、更新、删除历史,并支持时间旅行查询。 · 难度:入门 · +10XP

审计追踪与回滚

不同于简单的日志表,本教程实现VersionedModel抽象基类,它在每次save()delete()时,将序列化的完整快照存入VersionHistory表,包含操作者、IP和时间戳。还提供管理器as_of(date)返回特定时间点的实例状态。利用django.contrib.contenttypes泛型外键支持所有模型。最后演示如何在管理界面里对比两个版本的差异。

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey

class VersionHistory(models.Model): content_type = models.ForeignKey(ContentType, on_delete=CASCADE) object_id = models.PositiveIntegerField() content_object = GenericForeignKey() snapshot = models.JSONField() timestamp = models.DateTimeField(auto_now_add=True)

class VersionedModel(models.Model): class Meta: abstract = True

def save(self, *args, **kwargs): super().save(*args, **kwargs) VersionHistory.objects.create( content_object=self, snapshot=model_to_dict(self) )

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 189 篇
0 完成
🔥 0