在此代码中使用HttpResponse和JSON数据

时间:2015-03-11 02:39:41

标签: json django

当我使用Django控制台并打印它时,此代码似乎工作正常。

reference = FloodHazard.objects.filter(hazard='High')
ids = reference.values_list('id', flat=True)

for myid in ids:
    getgeom = FloodHazard.objects.get(id=myid).geom
    response = BuildingStructure.objects.filter(geom__intersects=getgeom).values(
        'brgy_locat').annotate(counthigh=Count('brgy_locat'))
    print response

我能够显示所有值,但是当使用HttpResponse时,它会返回一个空集。从查询集返回JSON数据的正确方法是什么?到目前为止,试过这个:

reference = FloodHazard.objects.filter(hazard='High')
ids = reference.values_list('id', flat=True)
response = {}
for myid in ids:
    getgeom = FloodHazard.objects.get(id=myid).geom
    response['high'] = BuildingStructure.objects.filter(geom__intersects=getgeom).values(
        'brgy_locat').annotate(counthigh=Count('brgy_locat'))

json_post = ujson.dumps(list(response))
return HttpResponse(json_post, content_type='application/json')

1 个答案:

答案 0 :(得分:1)

您的代码没有多大意义。您将所有查询集分配给response dict中的单个键。您应该为此目的使用列表:

据我所知,代码应该是这样的:

response = []
for myid in ids:
    getgeom = FloodHazard.objects.get(id=myid).geom
    response.extend(BuildingStructure.objects.filter(geom__intersects=getgeom)
                                     .values('brgy_locat')
                                     .annotate(counthigh=Count('brgy_locat')))

json_post = ujson.dumps(response)

如果您想要返回危险等级以及建筑物清单,那么您可以返回一个字典:

json_post = ujson.dumps({'hazard': 'high', 'buildings': response})