diff options
| author | Aymeric Augustin <aymeric.augustin@m4x.org> | 2015-09-21 20:53:10 +0200 |
|---|---|---|
| committer | Aymeric Augustin <aymeric.augustin@m4x.org> | 2015-09-21 22:31:13 +0200 |
| commit | 425c5e40eae90bd3ee3633011ef97edb26858c94 (patch) | |
| tree | 5791cbdf7cd9384ee650a497a9d677bbff105268 /django | |
| parent | 158b0a28374054b1c3f94a9602b69f93fc980448 (diff) | |
[1.8.x] Fixed #24921 -- set_autocommit(False) + ORM queries.
This commits lifts the restriction that the outermost atomic block must
be declared with savepoint=False. This restriction was overly cautious.
The logic that makes it safe not to create savepoints for inner blocks
also applies to the outermost block when autocommit is disabled and a
transaction is already active.
This makes it possible to use the ORM after set_autocommit(False).
Previously it didn't work because ORM write operations are protected
with atomic(savepoint=False).
Backport of 91e9f1c from master
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/transaction.py | 7 |
1 files changed, 0 insertions, 7 deletions
diff --git a/django/db/transaction.py b/django/db/transaction.py index d1388675d5..d67fd14cdf 100644 --- a/django/db/transaction.py +++ b/django/db/transaction.py @@ -156,13 +156,6 @@ class Atomic(ContextDecorator): raise TransactionManagementError( "Your database backend doesn't behave properly when " "autocommit is off. Turn it on before using 'atomic'.") - # When entering an atomic block with autocommit turned off, - # Django should only use savepoints and shouldn't commit. - # This requires at least a savepoint for the outermost block. - if not self.savepoint: - raise TransactionManagementError( - "The outermost 'atomic' block cannot use " - "savepoint = False when autocommit is off.") # Pretend we're already in an atomic block to bypass the code # that disables autocommit to enter a transaction, and make a # note to deal with this case in __exit__. |
