【问题标题】:Why should I care about django-revision operation being atomic?为什么我应该关心 django-revision 操作是原子的?
【发布时间】:2015-03-29 21:06:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: django django-1.7 django-reversion


    【解决方案1】:

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

    这在以下issue at django-reversion进行讨论。

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

    RevisionMiddleware 的使用随后被劝阻。 The following practice is advised

    如果您需要确保您的模型和修订版本保存在 保存交易,请使用 reversion.create_revision() 上下文 manager 或 decorator 结合 transaction.atomic()

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

    【讨论】:

      猜你喜欢
      • 2018-01-23
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多