当我使用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')
答案 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})