Database Django原子检查和减量

Database Django原子检查和减量,database,django,concurrency,locking,Database,Django,Concurrency,Locking,我有一个模型变量,我们把它叫做。actions,它是一个整数。这个想法是人们只有在有行动的时候才能做事情 如何检查操作是否>0,然后按原子顺序递减操作?我不想让他们打负片 if model.actions > 0: Model.objects.filter().update(actions=F('actions')-1) 我认为事务不能解决这个问题,因为它们不处理锁定。这似乎解决了这个问题,但文档也非常不清楚。它将与默认事务设置一起工作还是需要其他设置?我得到了这个解决方案: ret

我有一个模型变量,我们把它叫做。actions,它是一个整数。这个想法是人们只有在有行动的时候才能做事情

如何检查操作是否>0,然后按原子顺序递减操作?我不想让他们打负片

if model.actions > 0:
  Model.objects.filter().update(actions=F('actions')-1)
我认为事务不能解决这个问题,因为它们不处理锁定。这似乎解决了这个问题,但文档也非常不清楚。它将与默认事务设置一起工作还是需要其他设置?

我得到了这个解决方案:

returnValue = MyObject.objects.filter(pk=x, points__gt=0).update(points=F('points')-1)

它仅在满足条件时更新,并提供一个返回值,您可以检查它是否发生(这意味着点是否确实大于0)。

我可以将其放在前面:teamQS=Team.objects。选择\u for_update().filter(id=Team.id),然后从查询集中获取团队作为teamQS[0]检查一下,然后写信给那个团队。在哪一点上会选择_进行_更新以产生锁?