是否有任何方法可以检查是否使用select_for_update()提取了Django模型对象?虽然以下代码中的"locked"属性实际上并不存在,但我想要一个这样的属性。
with atomic():
unlocked_obj = SomeModel.objects.get(pk=123)
unlocked_obj.locked # False
locked_obj = SomeModel.objects.select_for_update().get(pk=123)
locked_obj.locked # True
唯一的检查方法是包含"select_for_update(nowait=True)",如果它被锁定,Django将引发DatabaseError。
https://docs.djangoproject.com/en/1.11/ref/models/querysets/#select-用于更新
打开2个django shell
外壳1
with atomic():
obj = SomeModel.objects.select_for_update().get(id=123)
import time; time.sleep(10)
外壳2
with atomic():
obj = SomeModel.objects.get(id=123)
obj.save()
Shell2中的obj.save()
指令应该暂停,直到Shell1没有从事务中出来。