Python Django';s GeoJSON序列化程序未序列化所有字段?

Python Django';s GeoJSON序列化程序未序列化所有字段?,python,django,geojson,Python,Django,Geojson,我正在使用Django 1.8,以及GeoDjango和PostGIS。我正在使用HttpResponse返回一些GeoJSON: from django.http import HttpResponse, JsonResponse code = request.GET.get('q', '') results = PCT.objects.filter(Q(code__startswith=code) | Q(name__icon

我正在使用Django 1.8,以及GeoDjango和PostGIS。我正在使用
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\u type
properties.ons\u code
字段


为什么会这样?
code
可能是保留名称吗?如果是这样的话,我该如何解决这个问题?

我已经快速查看了GeoJSON规范,它似乎只会说properties字段本身就是一个JSON对象,因此我认为如果您希望它位于JSON转储的这一部分,那么您就符合当前规范的要求。这就是说,该规范仍处于草案形式,因此可能会发生更改(并且可能会对该字段施加额外的限制)。假设你能接受,我们可以继续

处理此问题的代码位于序列化程序中。这当前将仅为
get\u dump\u object()
中的几何体、类型和属性字段创建数据。但是您会注意到,properties字段会呈现
self.\u current
中的任何内容。当序列化程序迭代对象中的其余字段时,该字段实际上是由父类的方法构建的

调用
get\u dump\u object()
时,self.\u current应包含对象中所有其他可序列化字段。正如您在serializer类中所看到的,只有当字段是用
serialize=True
构造的,并且该字段在您传入到
serialize()
的指定字段列表中时(或者您没有指定过滤器,所以您将获得所有内容),字段才会被序列化。因此,我猜想您的
code
字段已声明为不可序列化,或者它有一个与您的筛选器不匹配的意外内部名称


为了解决这个问题,我会查看一下您在模型中声明的
code
字段是否存在错误的序列化参数,然后尝试在没有任何字段列表的情况下序列化。希望其中一个能将您缺少的字段输入JSON。

可能是“code”不存在,但它不存在或没有值,我看到控制台上打印的值“99N”出现一次,结果列表是否只有一个对象?我们能看到整个响应吗?我相信这是因为
code
不是规范的有效部分或项目,并且不能以序列化形式放入功能对象
django geojson
现在正在做正确的事情。@Richard:我已经尽了最大努力回答你的问题,如果没有帮助,我会很高兴地完善答案。你能说明你的模型是什么吗?没有过滤器序列化对象的输出是什么吗?@Richard你的“code”属性是ForeignKey吗?可能是