1. 介绍
django-reversion
是为django提供历史版本管理的第三方库。
- 可以管理具体的一个实例对象的修改历史(具体的一条数据库表记录)
- 可以管理数据库model对应的table的删除历史(一张表里被删除的记录)
2. 我的django依赖
Django == 2.2.11
django-reversion >=3.0.5
djangorestframework== 3.10.3
3. model注册举例
import reversion
@reversion.register()
class BaseTable(models.Model):
"""
"""
class Meta:
abstract = True
verbose_name = "公共字段表"
db_table = 'BaseTable'
create_time = models.DateTimeField('创建时间', auto_now_add=True)
update_time = models.DateTimeField('更新时间', auto_now=True)
4. View举例
from reversion.views import RevisionMixin
from rest_framework.viewsets import ModelViewSet
class APIView(RevisionMixin, ModelViewSet):
def list(self, request, *args, **kwargs):
pass
def create(self, request, *args, **kwargs):
pass
def update(self, request, *args, **kwargs):
pass
def destroy(self, request, *args, **kwargs):
pass
5. model初始化
# 命令
python manage.py createinitialrevisions
# 执行结果
Creating revisions for 接口信息
- Created 148 / 148
6. 查询具体对象或者model中删除的历史记录
from django.shortcuts import get_object_or_404
from reversion.models import Version
# version_obj_id指某一个具体对象的id,model为要查询的table
instance = get_object_or_404(model, id=version_obj_id)
queryset = Version.objects.get_for_object(instance)
# 查询model中删除历史
queryset = Version.objects.get_deleted(model)
7. 恢复历史记录
from reversion.models import Version
# version_id为上一步查询出的历史记录的id
reversion = Version.objects.filter(id=version_id)
reversion[0].revision.revert()
最后
- 所有所需的配置都已经完成了,之后对注册过的model对象进行修改时就会在
reversion_version
表中生成对应记录 - 之后如何展现历史记录就靠自己发挥啦