Django的GeoJSON序列化程序未序列化所有字段?

理查德

我正在使用带有GeoDjango和PostGIS的Django 1.8。HttpResponse用来返回一些GeoJSON:

from django.http import HttpResponse, JsonResponse
code = request.GET.get('q', '')
results = PCT.objects.filter(Q(code__startswith=code) |
                                 Q(name__icontains=code))
results = results.filter(org_type='CCG')
for result in results:
    print result.code
geo_field = 'boundary'
fields = ('name', 'code', 'ons_code', 'org_type', 'boundary', )
return HttpResponse(serialize('geojson', results,
                    geometry_field=geo_field, fields=fields),
                    content_type='application/json')

在控制台中,这将打印一个code字段:

99N

但是返回的GeoJSON没有properties.code字段。它有一个properties.nameproperties.org_typeproperties.ons_code现场虽然。

在此处输入图片说明

为什么是这样?code也许保留名称?如果是这样,我该如何解决?

彼得·布里顿

我快速浏览了GeoJSON规范,似乎只说了property字段本身就是一个JSON对象,所以我认为您符合当前规范如果要在JSON转储的那一部分中使用它。也就是说,该规范仍处于草案形式,因此可能会发生变化(并且可能会在此字段上施加额外的约束)。假设您可以接受,我们可以继续...

处理此问题的代码在geojson序列化器中。目前,这只会为中的几何,类型和属性字段创建数据get_dump_object()但您会注意到,属性字段会呈现中的内容self._current当序列化程序在对象中其余字段上进行迭代时,该字段实际上是由父类的方法建立的。

get_dump_object()调用时间之前,self._current应该包含对象中的所有其他可序列化字段。正如您在基本序列化程序类中看到的那样,只有在使用构造serialize=True字段并且该字段位于您传递给的指定字段的列表中时,才会对字段进行序列化serialize()(或者您未指定过滤器,因此您将获得一切)。因此,我想您的code字段已被声明为不可序列化,或者它的内部名称与过滤器不匹配。

要尝试修复它,我将查看您code在Model中的字段声明中是否包含错误的序列化参数,然后尝试完全不包含任何字段列表的序列化。希望其中之一可以将您缺少的字段输入JSON。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章