3

我想开始使用 django-reversion。似乎最简单的方法是使用他们的中间件。但它给出了以下警告:

警告:由于 Django 1.6 事务处理中的更改,修订数据将保存在单独的数据库事务中,用于保存模型,即使您设置 ATOMIC_REQUESTS = True。

如果请求不是原子的,有什么注意事项?这似乎表明可能存在某种竞争条件。他们怎么可能长得像?我需要注意什么?

感谢您的时间。抱歉拼写错误我不是母语人士。

4

1 回答 1

2

正如警告中提到的,由于 django 自 1.6 以来处理事务的方式发生了一些变化,中间件不再与视图函数包装在同一事务中。

这在 django-reversion的以下问题中进行了讨论。

在实践中,由于RevisionMiddleware在保存模型的事务之外运行,因此无法在数据库级别提供严格的保证,即还原数据也将被保存。

然后不鼓励使用RevisionMiddleware 。建议采用以下做法

如果您需要确保您的模型和修订版本保存在保存事务中,请使用 reversion.create_revision() 上下文管理器或装饰器与 transaction.atomic()

这样,您可以确保 reversion_data 将始终与模型数据一起保存。我希望这有帮助。

于 2015-05-08T09:40:37.833 回答