如何检查Django模型对象是否被锁定



是否有任何方法可以检查是否使用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没有从事务中出来。

最新更新