diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-02 07:57:19 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-02 07:57:19 +0100 |
| commit | 0107e3d1058f653f66032f7fd3a0bd61e96bf782 (patch) | |
| tree | 9d13b2667b1e99434975ea8e930fe54d6c0c16e5 /docs | |
| parent | c33eb6dcd0c211f8f02b2976fe3b3463f0a54498 (diff) | |
Fixed #30953 -- Made select_for_update() lock queryset's model when using "self" with multi-table inheritance.
Thanks Abhijeet Viswa for the report and initial patch.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/ref/models/querysets.txt | 8 | ||||
| -rw-r--r-- | docs/releases/2.2.8.txt | 6 |
2 files changed, 14 insertions, 0 deletions
diff --git a/docs/ref/models/querysets.txt b/docs/ref/models/querysets.txt index b8dcb90fec..ba20c7516a 100644 --- a/docs/ref/models/querysets.txt +++ b/docs/ref/models/querysets.txt @@ -1692,6 +1692,14 @@ specify the related objects you want to lock in ``select_for_update(of=(...))`` using the same fields syntax as :meth:`select_related`. Use the value ``'self'`` to refer to the queryset's model. +.. admonition:: Lock parents models in ``select_for_update(of=(...))`` + + If you want to lock parents models when using :ref:`multi-table inheritance + <multi-table-inheritance>`, you must specify parent link fields (by default + ``<parent_model_name>_ptr``) in the ``of`` argument. For example:: + + Restaurant.objects.select_for_update(of=('self', 'place_ptr')) + You can't use ``select_for_update()`` on nullable relations:: >>> Person.objects.select_related('hometown').select_for_update() diff --git a/docs/releases/2.2.8.txt b/docs/releases/2.2.8.txt index 4d8f9869c5..3c5eb5c754 100644 --- a/docs/releases/2.2.8.txt +++ b/docs/releases/2.2.8.txt @@ -17,3 +17,9 @@ Bugfixes * Fixed a regression in Django 2.2.1 that caused a crash when migrating permissions for proxy models with a multiple database setup if the ``default`` entry was empty (:ticket:`31021`). + +* Fixed a data loss possibility in the + :meth:`~django.db.models.query.QuerySet.select_for_update()`. When using + ``'self'`` in the ``of`` argument with :ref:`multi-table inheritance + <multi-table-inheritance>`, a parent model was locked instead of the + queryset's model (:ticket:`30953`). |
