Prechádzať zdrojové kódy

[5.0.x] Fixed #34882 -- Fixed no options in AsGeoJSON() for geometries in non-default CRS.

Backport of 96e7a752b6c44a84e18d82d37524c1df64b32e12 from main
Denis Rouzaud 1 rok pred
rodič
commit
df3f97a7d6

+ 1 - 2
django/contrib/gis/db/models/functions.py

@@ -195,8 +195,7 @@ class AsGeoJSON(GeoFunc):
             options = 1
         elif crs:
             options = 2
-        if options:
-            expressions.append(options)
+        expressions.append(options)
         super().__init__(*expressions, **extra)
 
     def as_oracle(self, compiler, connection, **extra_context):

+ 20 - 1
tests/gis_tests/geoapp/test_functions.py

@@ -11,7 +11,7 @@ from django.db.models import IntegerField, Sum, Value
 from django.test import TestCase, skipUnlessDBFeature
 
 from ..utils import FuncTestMixin
-from .models import City, Country, CountryWebMercator, State, Track
+from .models import City, Country, CountryWebMercator, ManyPointModel, State, Track
 
 
 class GISFunctionsTests(FuncTestMixin, TestCase):
@@ -119,6 +119,25 @@ class GISFunctionsTests(FuncTestMixin, TestCase):
                 chicago_json,
             )
 
+    @skipUnlessDBFeature("has_AsGeoJSON_function")
+    def test_asgeojson_option_0(self):
+        p1 = Point(1, 1, srid=4326)
+        p2 = Point(2, 2, srid=4326)
+        obj = ManyPointModel.objects.create(
+            point1=p1,
+            point2=p2,
+            point3=p2.transform(3857, clone=True),
+        )
+        self.assertJSONEqual(
+            ManyPointModel.objects.annotate(geojson=functions.AsGeoJSON("point3"))
+            .get(pk=obj.pk)
+            .geojson,
+            # GeoJSON without CRS.
+            json.loads(
+                '{"type":"Point","coordinates":[222638.98158655,222684.20850554]}'
+            ),
+        )
+
     @skipUnlessDBFeature("has_AsGML_function")
     def test_asgml(self):
         # Should throw a TypeError when trying to obtain GML from a