Explorar o código

Fixed #25673 -- Made `GeometryField.from_db_value` set SRID

Sergey Fedoseev %!s(int64=9) %!d(string=hai) anos
pai
achega
5f7035cec7
Modificáronse 2 ficheiros con 10 adicións e 2 borrados
  1. 6 2
      django/contrib/gis/db/models/fields.py
  2. 4 0
      tests/gis_tests/geoapp/tests.py

+ 6 - 2
django/contrib/gis/db/models/fields.py

@@ -257,8 +257,12 @@ class GeometryField(GeoSelectFormatMixin, BaseSpatialField):
             return geom
 
     def from_db_value(self, value, expression, connection, context):
-        if value and not isinstance(value, Geometry):
-            value = Geometry(value)
+        if value:
+            if not isinstance(value, Geometry):
+                value = Geometry(value)
+            srid = value.srid
+            if not srid and self.srid != -1:
+                value.srid = self.srid
         return value
 
     def get_srid(self, geom):

+ 4 - 0
tests/gis_tests/geoapp/tests.py

@@ -893,3 +893,7 @@ class GeoQuerySetTest(TestCase):
     def test_non_concrete_field(self):
         NonConcreteModel.objects.create(point=Point(0, 0), name='name')
         list(NonConcreteModel.objects.all())
+
+    def test_values_srid(self):
+        for c, v in zip(City.objects.all(), City.objects.values()):
+            self.assertEqual(c.point.srid, v['point'].srid)