django管理中如何避免写冲突?

django管理中如何避免写冲突?,django,django-admin,Django,Django Admin,假设有两个(或更多)django管理员读取了数据库记录,然后对其进行更改和保存。数据库没有问题,但是一些管理员会惊讶于他们写的记录被覆盖了 这个问题曾经解决过吗?一种方法是使用一个显式的“正在编辑”按钮,在记录中设置一个标志。如果另一个管理员读取相同的记录,然后单击他的“正在编辑”,他将被警告有以前的编辑正在进行。或者,可以向记录中添加一个字段,该字段在保存记录时递增。如果该字段与读取记录时不同,则会警告管理员,自读取记录后,该记录已被其他人更改 是否有django本机的处理方法?django管

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

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


是否有django本机的处理方法?

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

一般来说,这是您想要了解数据库事务隔离特性的地方,因为这就是它拥有这些特性的原因


如果您真的不想这样做,那么在应用程序层有各种各样的模式可以这样做,但是没有标准的方法可以这样做——有些人设置一种“最后访问”时间戳,并拒绝在之后的某个时间段内进行编辑,其他人设置版本号,等等。

问得好,米奇。不幸的是,我恐怕没有这样的功能——尽管我也很高兴拥有它!嗯。。。什么?您真的建议跨单独的HTTP请求维护DB事务吗?否则,DB事务不会回答“两个管理员加载同一个管理员页面,一个保存覆盖另一个。”数据库会愉快地维护独立的事务,并完全按照您的要求执行,即保存最后保存的人保存的状态。应用程序级解决方案是这里唯一可用的解决方案。django-concurrency提供了以下机制: