From d093e01ec05f661063507503fdf294eb6ee54dee Mon Sep 17 00:00:00 2001 From: ovalseven8 <8258609+ovalseven8@users.noreply.github.com> Date: Sat, 22 Sep 2018 15:02:20 +0200 Subject: [PATCH] Clarified when QuerySet.select_for_update() locks. --- docs/ref/models/querysets.txt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/ref/models/querysets.txt b/docs/ref/models/querysets.txt index e5d178d34e..d24ac8a859 100644 --- a/docs/ref/models/querysets.txt +++ b/docs/ref/models/querysets.txt @@ -1660,11 +1660,17 @@ generating a ``SELECT ... FOR UPDATE`` SQL statement on supported databases. For example:: - entries = Entry.objects.select_for_update().filter(author=request.user) + from django.db import transaction -All matched entries will be locked until the end of the transaction block, -meaning that other transactions will be prevented from changing or acquiring -locks on them. + entries = Entry.objects.select_for_update().filter(author=request.user) + with transaction.atomic(): + for entry in entries: + ... + +When the queryset is evaluated (``for entry in entries`` in this case), all +matched entries will be locked until the end of the transaction block, meaning +that other transactions will be prevented from changing or acquiring locks on +them. Usually, if another transaction has already acquired a lock on one of the selected rows, the query will block until the lock is released. If this is