mirror of
https://github.com/django/django.git
synced 2024-12-27 11:35:53 +00:00
[5.0.x] Fixed #30601 -- Doc'd the need to manually revert all app state on transaction rollbacks.
Backport of aa80b357fb
from main
This commit is contained in:
parent
4e1bb31b39
commit
c8ac50c201
@ -187,7 +187,7 @@ Django provides a single API to control database transactions.
|
|||||||
If you catch exceptions raised by raw SQL queries, Django's behavior
|
If you catch exceptions raised by raw SQL queries, Django's behavior
|
||||||
is unspecified and database-dependent.
|
is unspecified and database-dependent.
|
||||||
|
|
||||||
.. admonition:: You may need to manually revert model state when rolling back a transaction.
|
.. admonition:: You may need to manually revert app state when rolling back a transaction.
|
||||||
|
|
||||||
The values of a model's fields won't be reverted when a transaction
|
The values of a model's fields won't be reverted when a transaction
|
||||||
rollback happens. This could lead to an inconsistent model state unless
|
rollback happens. This could lead to an inconsistent model state unless
|
||||||
@ -210,6 +210,14 @@ Django provides a single API to control database transactions.
|
|||||||
if obj.active:
|
if obj.active:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
This also applies to any other mechanism that may hold app state, such
|
||||||
|
as caching or global variables. For example, if the code proactively
|
||||||
|
updates data in the cache after saving an object, it's recommended to
|
||||||
|
use :ref:`transcation.on_commit <performing-actions-after-commit>`
|
||||||
|
instead, to defer cache alterations until the transaction is actually
|
||||||
|
committed.
|
||||||
|
|
||||||
|
|
||||||
In order to guarantee atomicity, ``atomic`` disables some APIs. Attempting
|
In order to guarantee atomicity, ``atomic`` disables some APIs. Attempting
|
||||||
to commit, roll back, or change the autocommit state of the database
|
to commit, roll back, or change the autocommit state of the database
|
||||||
connection within an ``atomic`` block will raise an exception.
|
connection within an ``atomic`` block will raise an exception.
|
||||||
@ -285,6 +293,8 @@ by Django or by third-party libraries. Thus, this is best used in situations
|
|||||||
where you want to run your own transaction-controlling middleware or do
|
where you want to run your own transaction-controlling middleware or do
|
||||||
something really strange.
|
something really strange.
|
||||||
|
|
||||||
|
.. _performing-actions-after-commit:
|
||||||
|
|
||||||
Performing actions after commit
|
Performing actions after commit
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user