相关疑难解决方法(0)

GeoDjango 序列化 GeoJSON 跳过“id”字段

我一直在使用 Geo-Django GeoJSON 序列化程序,以便我可以从 PostGIS 数据库中检索一些对象并将它们显示在 OpenLayers 地图上。

我通过以下方式获取要显示的对象:

gqs = self.model.objects.filter(point__distance_lte=(pnt, long(dist)))
type(gqs)
<class 'django.contrib.gis.db.models.query.GeoQuerySet'>
Run Code Online (Sandbox Code Playgroud)

并且地理对象包括预期的所有模型字段:

self.model._meta.get_fields()
(<django.db.models.fields.AutoField: id>,
<django.db.models.fields.CharField: name>, 
<django.db.models.fields.SlugField: name_slug>, 
<django.db.models.fields.CharField: contact>, 
<django.db.models.fields.CharField: address>, 
<django.db.models.fields.CharField: postcode>, 
<django.db.models.fields.EmailField: email>, 
<django.db.models.fields.CharField: fax>, 
<django.db.models.fields.CharField: tel>, 
<django.db.models.fields.CharField: tel1>, 
<django.db.models.fields.CharField: tel_fax>, 
<django.db.models.fields.URLField: url>, 
<django.db.models.fields.CharField: wardlabel>, 
<django.db.models.fields.DecimalField: lon>, 
<django.db.models.fields.DecimalField: lat>, 
<django.db.models.fields.IntegerField: easting>, 
<django.db.models.fields.IntegerField: northing>, 
<django.db.models.fields.DateField: first_entered>, 
<django.db.models.fields.DateField: updated>, 
<django.contrib.gis.db.models.fields.PointField: point>)
Run Code Online (Sandbox Code Playgroud)

包括id值...

(Pdb) gqs[0].id
5
Run Code Online (Sandbox Code Playgroud)

然后我以最简单的方式将 GeoQuerySet 传递给 GeoJSON 序列化程序:

gqs_serialized = serialize('geojson', gqs)
Run Code Online (Sandbox Code Playgroud)

并获得输出:

gqs_serialized
u'{"type": "FeatureCollection", 
  "crs": {
    "type": "name", …
Run Code Online (Sandbox Code Playgroud)

django serialization geodjango geojson

3
推荐指数
1
解决办法
1546
查看次数

标签 统计

django ×1

geodjango ×1

geojson ×1

serialization ×1