私は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"
私はジャンゴを回避し、これを実行しようとすることで、直接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)
item = ArchivrItem(座標= GEOSGeometry( 'POINT(5 23)'、srid = 4326)) 'アイテム= ArchivrItem(座標= GEOSGeometry( 'SRID = 4326; POINT(5 23)'))' –
これを値として挿入することで、SQLで直接管理できました。 'ST_SetSrid(ST_PointFromText( 'POINT(5 23)')、4326)'。 –
PointFromTextにはSRID引数があり、SetSridは不要です:http://www.postgis.org/docs/ST_PointFromText.html。実行しようとしているSQL(そのページに例があります)を出力し、Djangoから何をしようとしているのかを確認できますか? –