Index: django/contrib/gis/db/models/sql/__init__.py
===================================================================
--- django/contrib/gis/db/models/sql/__init__.py	(revision 9976)
+++ django/contrib/gis/db/models/sql/__init__.py	(working copy)
@@ -1,3 +1,3 @@
 from django.contrib.gis.db.models.sql.conversion import AreaField, DistanceField, GeomField
-from django.contrib.gis.db.models.sql.query import GeoQuery
+from django.contrib.gis.db.models.sql.query import GeoQuery, GeoUpdateQuery
 from django.contrib.gis.db.models.sql.where import GeoWhereNode
Index: django/contrib/gis/db/models/sql/query.py
===================================================================
--- django/contrib/gis/db/models/sql/query.py	(revision 9976)
+++ django/contrib/gis/db/models/sql/query.py	(working copy)
@@ -306,3 +306,16 @@
             # Otherwise, check by the given field name -- which may be
             # a lookup to a _related_ geographic field.
             return GeoWhereNode._check_geo_field(self.model._meta, field_name)
+
+class GeoUpdateQuery(sql.subqueries.UpdateQuery):
+
+    def add_update_fields(self, values_seq):
+        """
+        Overloaded so that get_db_prep_save() is called on values
+        before going to `add_update_fields`.
+        """
+        for i, row in enumerate(values_seq):
+            fld, model, val = row
+            if isinstance(fld, GeometryField):
+                values_seq[i] = (fld, model, fld.get_db_prep_save(val))
+        return super(GeoUpdateQuery, self).add_update_fields(values_seq)
Index: django/contrib/gis/db/models/query.py
===================================================================
--- django/contrib/gis/db/models/query.py	(revision 9976)
+++ django/contrib/gis/db/models/query.py	(working copy)
@@ -1,11 +1,11 @@
 from django.core.exceptions import ImproperlyConfigured
-from django.db import connection
+from django.db import connection, transaction
 from django.db.models.query import sql, QuerySet, Q
 
 from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.db.models import aggregates
 from django.contrib.gis.db.models.fields import GeometryField, PointField
-from django.contrib.gis.db.models.sql import AreaField, DistanceField, GeomField, GeoQuery, GeoWhereNode
+from django.contrib.gis.db.models.sql import AreaField, DistanceField, GeomField, GeoQuery, GeoUpdateQuery, GeoWhereNode
 from django.contrib.gis.measure import Area, Distance
 from django.contrib.gis.models import get_srid_info
 
@@ -28,6 +28,26 @@
         super(GeoQuerySet, self).__init__(model=model, query=query)
         self.query = query or GeoQuery(self.model, connection)
 
+    #### Overloaded methods ####
+    def update(self, **kwargs):
+        """
+        Updates all elements in the current QuerySet, setting all the given
+        fields to the appropriate values.
+
+        Overloaded to use GeoUpdateQuery instead of UpdateQuery.
+        """
+        assert self.query.can_filter(), \
+                "Cannot update a query once a slice has been taken."
+        query = self.query.clone(GeoUpdateQuery)
+        query.add_update_values(kwargs)
+        rows = query.execute_sql(None)
+        transaction.commit_unless_managed()
+        self._result_cache = None
+        return rows
+    update.alters_data = True
+
+    #### Routines unique to GeoQuerySet ####
+
     def area(self, tolerance=0.05, **kwargs):
         """
         Returns the area of the geographic field in an `area` attribute on
Index: django/contrib/gis/db/backend/postgis/creation.py
===================================================================
--- django/contrib/gis/db/backend/postgis/creation.py	(revision 9976)
+++ django/contrib/gis/db/backend/postgis/creation.py	(working copy)
@@ -140,6 +140,7 @@
     # Closing the connection
     connection.close()
     settings.DATABASE_NAME = db_name
+    settings.DATABASE_SUPPORTS_TRANSACTIONS = connection.creation._rollback_works()
 
     # Syncing the database
     call_command('syncdb', verbosity=verbosity, interactive=interactive)
Index: django/contrib/gis/tests/geoapp/test_regress.py
===================================================================
--- django/contrib/gis/tests/geoapp/test_regress.py	(revision 0)
+++ django/contrib/gis/tests/geoapp/test_regress.py	(revision 0)
@@ -0,0 +1,20 @@
+import os, unittest
+from django.test import TestCase
+from django.contrib.gis.db.backend import SpatialBackend
+from django.contrib.gis.tests.utils import no_mysql, no_oracle, no_postgis
+from models import City
+
+class GeoRegressionTests(TestCase):
+
+    def test01_update(self):
+        "Testing GeoQuerySet.update(), see #10411."
+        pnt = City.objects.get(name='Pueblo').point
+        bak = pnt.clone()
+        pnt.y += 0.005
+
+        City.objects.filter(name='Pueblo').update(point=pnt)
+        self.assertEqual(pnt, City.objects.get(name='Pueblo').point)
+        City.objects.filter(name='Pueblo').update(point=bak)
+        self.assertEqual(bak, City.objects.get(name='Pueblo').point)
+        
+
Index: django/contrib/gis/tests/geoapp/tests.py
===================================================================
--- django/contrib/gis/tests/geoapp/tests.py	(revision 9976)
+++ django/contrib/gis/tests/geoapp/tests.py	(working copy)
@@ -571,9 +571,12 @@
         for pc in qs: self.assertEqual(32128, pc.point.srid)
 
 from test_feeds import GeoFeedTest
+from test_regress import GeoRegressionTests
 from test_sitemaps import GeoSitemapTest
+
 def suite():
     s = unittest.TestSuite()
+    s.addTest(unittest.makeSuite(GeoRegressionTests))
     s.addTest(unittest.makeSuite(GeoModelTest))
     s.addTest(unittest.makeSuite(GeoFeedTest))
     s.addTest(unittest.makeSuite(GeoSitemapTest))
Index: django/contrib/gis/tests/geoapp/tests_mysql.py
===================================================================
--- django/contrib/gis/tests/geoapp/tests_mysql.py	(revision 9976)
+++ django/contrib/gis/tests/geoapp/tests_mysql.py	(working copy)
@@ -174,9 +174,12 @@
         self.assertRaises(ImproperlyConfigured, Country.objects.all().gml, field_name='mpoly')
 
 from test_feeds import GeoFeedTest
+from test_regress import GeoRegressionTests
 from test_sitemaps import GeoSitemapTest
+
 def suite():
     s = unittest.TestSuite()
+    s.addTest(unittest.makeSuite(GeoRegressionTests))
     s.addTest(unittest.makeSuite(GeoModelTest))
     s.addTest(unittest.makeSuite(GeoFeedTest))
     s.addTest(unittest.makeSuite(GeoSitemapTest))
