我一直收到这个错误:
TypeError at /
<Section: BILAY - 001> is not JSON serializable
在我的views.py中:
def display_maps(request):
pnt = ButuanMaps.objects.get(clandpin='162-03-0001-017-33').geom
query_section = Section.objects.all().order_by('sbrgyid__cbrgyname')
query_soiltype = SoilType.objects.all()
query_maps = ButuanMaps.objects.filter(landproperty__sownerid__id=5, geom__distance_lte=(pnt, D(km=100)),narea__lte =5500000)
djf = Django.Django(geodjango='geom', properties= ['id','clandpin','ssectionid','narea'])
geoj = GeoJSON.GeoJSON()
butuan_agao = geoj.encode(djf.decode(query_maps.transform(3857)))
...
return render(request, "index.html", {
'butuan_agao': butuan_agao,
'query_agao': query_maps,
'query_section': query_section,
'butuan_soil': butuan_soil,
'query_soiltype': query_soiltype
})
在我的models.py中:
class ButuanMaps(gismodel.Model):
class Meta:
verbose_name = u'Butuan Map'
verbose_name_plural = u'Butuan Maps'
clandpin = gismodel.CharField("Land PIN", max_length=50, null=True, blank=True)
ssectionid = gismodel.ForeignKey(Section)
narea = gismodel.DecimalField(max_digits=20, decimal_places=6)
#ssectionid_id = gismodel.IntegerField()
geom = gismodel.MultiPolygonField("Geom ID", srid=32651, null=True, blank=True)
objects = gismodel.GeoManager()
def __unicode__(self):
return self.clandpin
当我在属性上添加narea
和ssectionid
时,它会返回错误。为什么?在这一行:
djf = Django.Django(geodjango='geom', properties= ['id','clandpin','ssectionid','narea'])
答案 0 :(得分:1)
我对 Django.Django - GeoJSON.GeoJSON()方法有同样的问题。
错误很明显,告诉您字段是&#34;而不是JSON可序列化&#34;。
第一个是因为它是小数,所以我猜它不能理解你的十进制符号,它应该是昏迷还是点......
第二个是因为它是一个ForeignKey并且它不能很好地处理它。
对于最后一个问题,我的建议是从 djf 部分删除该属性,对其进行解码,将该属性放回 json-like dictionnary 中,最后编码这一切。
1 - 获取属性
prop = MyModel._meta.get_all_field_names()
2 - 删除&#39; ssectionid&#39;属性
prop.remove("ssectionid")
3-解码
djf = Django.Django(geodjango='geom', properties = prop)
decod = djf.decode(obj)
4 - 获取外键值
sectionlist = MyModel.objects.filter().values('ssectionid__id')
5 - 对于&#39; decod&#39;的每个元素。添加属性&#39; ssectionid&#39;
for el in decod:
el.to_dict()["properties"].update({"ssectionid": sectionlist.get(id=el.properties['id'])["ssectionid__id"]})
6-编码
geojson = geoj.encode(decod)
我不是说这是一个很好的答案,我说它有效。
修改强>
您正在寻找包django-geojson!