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. ...@@ -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 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.
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 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.
......
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