Browse Source

Fixed #25939 -- Removed redundant transaction in QuerySet.update_or_create().

There is no need to wrap the save() call in transaction.atomic() as
it's already done down the call stack in Model.save_base().
Ed Bartosh 9 years ago
parent
commit
423b3afce4
2 changed files with 5 additions and 3 deletions
  1. 1 3
      django/db/models/query.py
  2. 4 0
      docs/releases/1.10.txt

+ 1 - 3
django/db/models/query.py

@@ -484,9 +484,7 @@ class QuerySet(object):
                 return obj, created
         for k, v in six.iteritems(defaults):
             setattr(obj, k, v)
-
-        with transaction.atomic(using=self.db, savepoint=False):
-            obj.save(using=self.db)
+        obj.save(using=self.db)
         return obj, False
 
     def _create_object_from_params(self, lookup, params):

+ 4 - 0
docs/releases/1.10.txt

@@ -363,6 +363,10 @@ Miscellaneous
   :class:`~django.http.HttpResponse` are now closed immediately instead of when
   the WSGI server calls ``close()`` on the response.
 
+* A redundant ``transaction.atomic()`` call in ``QuerySet.update_or_create()``
+  is removed. This may affect query counts tested by
+  ``TransactionTestCase.assertNumQueries()``.
+
 .. _deprecated-features-1.10:
 
 Features deprecated in 1.10