1. 介紹
django-reversion是為django提供歷史版本管理的第三方庫。
- 可以管理具體的一個實例對象的修改歷史(具體的一條數(shù)據(jù)庫表記錄)
- 可以管理數(shù)據(jù)庫model對應(yīng)的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('創(chuàng)建時間', 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
# 執(zhí)行結(jié)果
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. 恢復(fù)歷史記錄
from reversion.models import Version
# version_id為上一步查詢出的歷史記錄的id
reversion = Version.objects.filter(id=version_id)
reversion[0].revision.revert()
最后
- 所有所需的配置都已經(jīng)完成了,之后對注冊過的model對象進行修改時就會在
reversion_version表中生成對應(yīng)記錄 - 之后如何展現(xiàn)歷史記錄就靠自己發(fā)揮啦