问题标签 [select-for-update]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Django - 将查询集中的单个记录分配给用户并更新它。仅在事务失败时才将记录发布给另一个用户
我是 Django 初学者,我正在尝试在 Django 中创建一个仓库管理系统。系统跟踪哪些产品进入仓库,因此知道仓库中有什么以及在哪个位置。
有几个用户(订单拣货员)同时登录并且必须从仓库中获取产品。
我的模型如下所示:
必须在某一天从仓库中提取的产品必须满足多个条件。
例如:
- available_for_picking = 今天或过去的日期
和
- aldready_picked = False
我想做的事:
每个用户访问 url:www.mydomain.com/get_order_location_to_pick并获取他必须从仓库提取的产品的位置。
但是,有几种产品符合选择标准,并且有多个用户同时使用该软件。所以我想避免将相同的产品(和位置)分配给超过 1 个用户。当用户拿走产品后,布尔值“already_picked”应从 False 更改为 True。如果用户由于某种原因无法从仓库中取回分配给他的产品,则当他/她访问相同的 url www.mydomain.com/get_order_location_to_pick时,该产品必须分配给另一个用户
有什么好方法可以做到这一点?
在我看来,我目前有这个:
这真的行不通。它只是从 QuerySet 中提供相同的产品,并将其分配给当前访问 url www.mydomain.com/get_order_location_to_pick的所有用户
我读过一些关于 Django 函数 select_for_update() 的内容,但我并没有完全理解它的作用。这是我在忙于在仓库中寻找产品时用来将第一个产品“锁定”给第一个用户的东西吗?
在某种程度上,我试图在用户对其执行操作时将查询集中的单个记录分配给用户,并且仅在事务不成功时才使该对象再次可供其他用户使用。
django - Django 在测试中选择更新行为
在试图了解 django 的 select_for_update 时,我创建了一个测试来查看。据我了解,如果有两个进程,一个在事务内部选择更新,另一个在事务结束之前尝试在其他进程中写入锁定的行,写入将失败。但是,以下测试通过了。有什么问题?