我想开始使用django-reversion。似乎最简单的方法是使用他们的中间件。但它给出了以下警告:
警告:由于Django 1.6事务处理的更改,即使您设置了ATOMIC_REQUESTS = True,修订数据也会保存在用于保存模型的单独数据库事务中。
如果请求不是原子的,有什么警告?这似乎表明可能存在某种竞争条件。他们怎么样?我需要注意什么?
感谢您的时间。对不起拼写错误我不是母语人士。
答案 0 :(得分:2)
正如警告中所提到的,由于django自1.6以来处理事务的方式发生了一些变化,因此中间件不再包含在与视图函数相同的事务中。
以下issue at django-reversion讨论了这一点。
实际上,由于 RevisionMiddleware 在保存模型的事务之外运行,因此无法在数据库级别提供严格保证,也可以保存恢复数据。
然后不鼓励使用 RevisionMiddleware 。 The following practice is advised:
如果您需要确保您的模型和修订版保存在 保存事务,请使用reversion.create_revision()上下文 管理器或装饰器与transaction.atomic()
结合使用
这样,您可以确保reversion_data将始终与模型数据一起保存。我希望这会有所帮助。