Django 的 GeoJSON 序列化器没有序列化所有字段?

Django's GeoJSON serializer not serializing all fields?

我正在使用 Django 1.8、GeoDjango 和 PostGIS。我正在使用 HttpResponse 到 return 一些 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 returned 没有 properties.code 字段。它有一个 properties.nameproperties.org_typeproperties.ons_code 字段。

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

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

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

到调用 get_dump_object() 时,self._current 应该包含对象中的所有其他 serializable 字段。正如您在 base 序列化程序 class 中看到的那样,仅当字段由 serialize=True 构造且该字段位于您传递给 [=14 的指定字段列表中时,才会被序列化=](或者您没有指定过滤器,所以您将获得所有内容)。因此,我猜测您的 code 字段已被声明为不可序列化,或者它具有与您的过滤器不匹配的意外内部名称。

为了尝试修复它,我会查看您在模型中声明的 code 字段是否有错误的序列化参数,然后尝试在没有任何字段列表的情况下进行序列化。希望其中之一能让您丢失的字段进入 JSON.