有没有办法检查是否使用select_for_update()获取Django模型对象? 虽然被锁定了#39;实际上不存在以下代码中的属性,我想要这样的一个。
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
答案 0 :(得分:0)
检查的唯一方法是通过包含" select_for_update( nowait = True )",如果它被锁定,Django会引发DatabaseError。
https://docs.djangoproject.com/en/1.11/ref/models/querysets/#select-for-update
答案 1 :(得分:-2)
打开2个django shell
with atomic():
obj = SomeModel.objects.select_for_update().get(id=123)
import time; time.sleep(10)
with atomic():
obj = SomeModel.objects.get(id=123)
obj.save()
Shell2中的 obj.save()
指令应该暂停,直到Shell1没有退出事务。