我有一个模型变量,我们称它为.actions,它是一个整数。我们的想法是,如果还有行动,人们只能做事。
如果操作是>我该如何检查? 0然后原子地减少动作?我不希望他们遭受过负面的打击。
if model.actions > 0:
Model.objects.filter().update(actions=F('actions')-1)
我不认为交易会解决这个问题,因为他们不处理锁定问题。 select_for_update似乎解决了这个问题,但该文档也很难理解。它是否适用于默认事务设置或是否需要其他设置?
答案 0 :(得分:0)
我得到了这个解决方案:
returnValue = MyObject.objects.filter(pk=x, points__gt=0).update(points=F('points')-1)
只有在满足条件时才会更新,并为您提供一个返回值,您可以检查它是否发生(这意味着如果这些点确实大于0)。