首页 > 解决方案 > 如何在需要时跟踪交易历史和回滚?

问题描述

假设我在UserActivity模型中维护用户的活动日志。

class UserActivity(models.Model):
    description = models.TextField()
    query = models.TextField()
  1. 该模型如何实现以及需要哪些字段,以便我可以随时回滚历史中的事务?
  2. 它的缺点和依赖关系是什么?

我知道transaction.atomic。将其视为几天前进行的交易并在今天回滚。

标签: djangodjango-modelsdjango-rest-framework

解决方案


我建议您使用django-simple-history[PiPy] 之类的工具。您需要添加一些中间件,并HistoricalRecords()在要跟踪的模型上定义 a。

它将为您跟踪的每个模型创建一个额外的表,该表将存储更改(添加、更新、删除)以及进行更新的用户、时间戳和可选原因。

例如,您可以查询历史中对象的状态,例如:

from datetime import datetime

my_model_object.history.as_of(datetime(2019, 7, 2, 7, 56))

检索my_model_object2019 年 2 月 7 日 7:56:00 的状态。


推荐阅读