我为什么要关心django-revision操作是原子的?

时间:2015-03-29 21:06:07

标签: django django-1.7 django-reversion

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

  

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

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

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

1 个答案:

答案 0 :(得分:2)

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

以下issue at django-reversion讨论了这一点。

实际上,由于 RevisionMiddleware 在保存模型的事务之外运行,因此无法在数据库级别提供严格保证,也可以保存恢复数据。

然后不鼓励使用 RevisionMiddleware The following practice is advised

  

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

结合使用

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