Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 8200)
+++ django/db/models/query.py	(working copy)
@@ -330,7 +330,17 @@
                 obj.save()
                 return obj, True
             except IntegrityError, e:
-                return self.get(**kwargs), False
+                # If transactions are managed manually, we must fail.
+                if transaction.is_managed():
+                    raise e
+                # Try to get object, maybe this was just concurrency error.
+                try:
+                    transaction.rollback_unless_managed()
+                    obj = self.get(**kwargs)
+                except self.model.DoesNotExist:
+                     # No object found, re-raise error.
+                     raise e
+                return obj, False
 
     def latest(self, field_name=None):
         """
