我正在使用带有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.name
,properties.org_type
而properties.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] 删除。
我来说两句