我使用GeoDjango内置,并有一个PointField一个Django模型:如何使用GeoDjango/PostGIS满足“enforce_srid_coordinate”约束条件?
class ArchivrItem(models.Model):
...
coordinate = models.PointField(srid=4326)
当我尝试插入一个新ArchivrItem,利用纬度和经度,我得到这个错误:
ERROR: new row for relation "archivr_archivritem" violates check constraint "enforce_srid_coordinate"
我可避免Django和试图做到这一点直接获得的PostgreSQL同样的错误:
INSERT INTO archivr_archivritem (coordinate) VALUES ('POINT(51.520667 -0.094833)');
我可能被周围的SRID和点SYSTE幼稚和无知ms ...我错过了什么?谢谢。
更新:我应该添加约束是什么。桌子上的约束条件是:
"enforce_dims_coordinate" CHECK (st_ndims(coordinate) = 2)
"enforce_geotype_coordinate" CHECK (geometrytype(coordinate) = 'POINT'::text OR coordinate IS NULL)
"enforce_srid_coordinate" CHECK (st_srid(coordinate) = 4326)
嗯,现在我已经尝试了所有的这些,用了同样的错误:'项目= ArchivrItem(坐标=点(5,23))' ,'item = ArchivrItem(coordinate = GEOSGeometry('SRID = 4326; POINT(5 23)'))'和'item = ArchivrItem(coordinate = GEOSGeometry('POINT(5 23)',srid = 4326))''。 –
我已经成功地在SQL中直接管理它,通过插入这个值作为一个值:'ST_SetSrid(ST_PointFromText('POINT(5 23)'),4326)'。 –
PointFromText有一个SRID参数,不需要SetSrid:http://www.postgis.org/docs/ST_PointFromText.html。你能得到它输出它试图运行的SQL(该页面有一个例子),看看它试图从Django做什么? –