从非相关的GeoDjango模型制作表格报告

时间:2015-03-01 03:39:49

标签: django django-models django-views jquery-datatables geodjango

我有这2个型号:

class BuildingStructure(models.Model):
    bldg_name = models.CharField(max_length=100)
    height = models.FloatField()
    code = models.CharField(max_length=25)
    block_name = models.CharField(max_length=75)
    bldg_type = models.CharField(max_length=50)
    brgy_locat = models.CharField(max_length=50)
    geom = models.MultiPointField(srid=32651, null=True, blank=True)
    objects = models.GeoManager()

    def __unicode__(self):
        return self.bldg_name

class FloodHazard(models.Model):
    gridcode = models.IntegerField()
    hazard = models.CharField(max_length=6)
    date_field = models.CharField(max_length=50)
    geom = models.MultiPolygonField(srid=32651, null=True, blank=True)
    objects = models.GeoManager()

    def __unicode__(self):
        return self.hazard
模型中的

hazard字段具有以下值:' High',' Medium'' Low'。 我想以表格格式(HTML)创建一个报告,如下所示: sample result

到目前为止我试过这个:

getgeom = FloodHazard.objects.get(id=512).geom
getgeom_medium = FloodHazard.objects.get(id=620).geom
getgeom_low = FloodHazard.objects.get(id=638).geom

response_data = {}
response_data["medium"] = list(BuildingStructure.objects.filter(geom__intersects=getgeom_medium).values( 'brgy_locat').annotate(countmedium=Count('brgy_locat')))
response_data["high"] = list(BuildingStructure.objects.filter(geom__intersects=getgeom).values('brgy_locat').annotate( counthigh=Count('brgy_locat')))
response_data["low"] = list(BuildingStructure.objects.filter(geom__intersects=getgeom_low).values('brgy_locat').annotate( countlow=Count('brgy_locat')))

result = {}
for category in response_data.values():
    for element in category:
        key = element.pop('brgy_locat')
        if key not in result:
            result[key] = {"loc":key}
        result[key].update(element)


json_result = result.values()

return HttpResponse(list(json.dumps(json_result)), content_type='application/json')

上面的代码工作正常,因为我能够获得我的预期输出。但是当你检查它时,我在每种危险类型中尝试了一个id。所以现在我的问题是使用filter来获取所有id并将其用作我的GeoQuerySet中的引用。任何帮助将不胜感激。我试图在我的模板中将数据作为JSON传递,因为我使用的是datatables

这就是我获取所有ID的方法。危险类型"高"

reference = FloodHazard.objects.filter(hazard='High')
ids = reference.values_list('id', flat=True)
    for id in ids:
    #something has to be done here...

0 个答案:

没有答案