有人知道你是否可以在一个查询中同时执行.select_for_update()和.select_related()语句?如:
employee = get_object_or_404(Employee.objects.select_for_update().
select_related(‘company’), pk=3)
它似乎在我的代码中的一个地方正常工作,但第二次使用引发了一个" InternalError:当前事务被中止"进行一系列单元测试。删除.select_related并只留下.select_for_update使错误消失,但我不知道为什么。我想用它们来优化我的代码,但如果被迫选择,我会选择select_for_update。想知道我是否可以同时使用这两种方式。使用postgres和django 1.9。谢谢!
答案 0 :(得分:2)
在同一查询集上使用select_related
时,不能将select_for_update
与可以为空的外键一起使用。
这适用于所有情况:
Book.objects.select_related().select_for_update().get(name='Doors of perception')
答案 1 :(得分:0)
自Django 2.0起,即使在可空关系上,您可以与select_for_update
一起使用select_related
-using new parameter of=...
使用他们在文档中的Person
示例,您可以
Person.objects.select_related('hometown').select_for_update(of=('self',))
仅锁定Person
对象