mirror of
https://github.com/django/django.git
synced 2025-07-24 13:44:32 +00:00
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.
This commit is contained in:
parent
c33eb6dcd0
commit
0107e3d105
5 changed files with 135 additions and 19 deletions
|
@ -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()
|
||||
|
|
|
@ -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`).
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue