【问题标题】:How are write conflicts avoided in django administration?在 django 管理中如何避免写冲突?
【发布时间】:2009-05-08 03:09:13
【问题描述】:

假设有两个(或更多)django 管理员读取了一条数据库记录,然后更改并保存它。没有数据库问题,但有些管理员会惊讶于他们写入的记录被覆盖了。

这个问题有解决过吗?一种方法是有一个明确的“正在编辑”按钮,它在记录中设置一个标志。如果另一个管理员阅读了相同的记录,然后单击他的“正在编辑”,他将被警告说有一个先前的编辑正在进行中。或者可以在记录中添加一个字段,该字段在保存记录时递增。如果该字段与读取记录时不同,则会警告管理员该记录在读取后已被其他人更改。

有没有原生的 django 方式来处理这个问题?

【问题讨论】:

  • 好问题米奇。不幸的是,我担心没有这样的功能——尽管我很高兴拥有它!

标签: django django-admin


【解决方案1】:

Django 管理员没有实现任何开箱即用的写冲突保护。自己添加并不难。就个人而言,我会采用“版本号字段”的方法。

【讨论】:

【解决方案2】:

通常这是您想要了解数据库的事务隔离功能的地方,因为这就是它拥有这些功能的原因。

如果您真的不想这样做,在应用程序层存在各种模式来执行此操作,但没有规范的方法来执行此操作 - 有些人设置了一种“最后访问”时间戳并拒绝允许在那之后的一段时间内编辑,其他人设置版本号等等。

【讨论】:

  • 呃……什么?您是否真的建议跨单独的 HTTP 请求维护数据库事务?否则,数据库事务无法回答“两个管理员加载同一个管理页面,一个人的保存覆盖另一个”。数据库愉快地维护隔离事务,并完全按照您的要求执行,即保存最后保存的人保存的状态。应用级解决方案是这里唯一可用的解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 2011-07-02
  • 2018-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2019-08-11
相关资源
最近更新 更多