Kaydet (Commit) c9b22707 authored tarafından Jonatas CD's avatar Jonatas CD Kaydeden (comit) Tim Graham

Fixed #28479 -- Doc'd that transaction rollback doesn't revert model state.

üst 0891503f
......@@ -176,6 +176,29 @@ Django provides a single API to control database transactions.
If you catch exceptions raised by raw SQL queries, Django's behavior
is unspecified and database-dependent.
.. admonition:: You may need to manually revert model state when rolling back 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
you manually restore the original field values.
For example, given ``MyModel`` with an ``active`` field, this snippet
ensures that the ``if obj.active`` check at the end uses the correct
value if updating ``active`` to ``True`` fails in the transaction::
from django.db import DatabaseError, transaction
obj = MyModel(active=False)
obj.active = True
try:
with transaction.atomic():
obj.save()
except DatabaseError:
obj.active = False
if obj.active:
...
In order to guarantee atomicity, ``atomic`` disables some APIs. Attempting
to commit, roll back, or change the autocommit state of the database
connection within an ``atomic`` block will raise an exception.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment