GeoDjango在测试期间构造错误的SQL查询

时间:2018-03-08 10:43:17

标签: geodjango

我的一个GeoDjango测试失败并带有

st_intersects(text, geometry)

我无法弄清楚为什么它会调用st_intersects(geometry, geometry)而不是from django.contrib.gis.geos import Polygon ... bbox_geom = Polygon.from_bbox(bbox.split(',')) return Field.objects.filter(geom__intersects=bbox_geom) ,因为它被定义为

bbox = '1,1,2,2'

在我的视图中,geom或等效内容MultiPolygonfrom django.test import TestCase, Client def setUp(self): self.client = Client() def test_bbox_filter_single_feature(self): response = self.client.get('/api/v1/fields/', {'bbox': '1,1,2,2'}) ...

只有在测试为

时才会发生这种情况
curl

在测试环境之外以任何其他方式(浏览器,邮递员,Point)调用此视图不会产生此错误。

注意:对于{{1}}几何体,我有一个类似的视图,它可以毫不费力地通过测试。

测试期间可能导致此问题的不同之处是什么?有关如何解决它的任何想法?我正在运行Django 1.11.11,PostgreSQL 9.5.4和PostGIS 2.2.2

1 个答案:

答案 0 :(得分:1)

如果您尝试print Field.objects.filter(geom__intersects=bbox_geom).query,您会看到提供给ST_Intersects的第一个参数是您的Field.geom字段。因此,数据库的Text定义为field.geom

您的迁移存在问题,忘记将Field.geom定义为几何。使用 Django< 1.9 我会想到你的Model类上有一个被遗忘的objects = manager.GeoManager定义,但是自Django 1.9以来这是不必要的。