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

时间:2014-09-03 15:28:48

标签: django django-models locking

有没有办法检查是否使用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

2 个答案:

答案 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)

Shell2

with atomic():
    obj = SomeModel.objects.get(id=123)
    obj.save()
Shell2中的

obj.save()指令应该暂停,直到Shell1没有退出事务。