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.name
、properties.org_type
和 properties.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.
我正在使用 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.name
、properties.org_type
和 properties.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.