diff options
author | Étienne Loks <etienne.loks@proxience.com> | 2014-06-05 15:13:31 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@proxience.com> | 2014-06-05 15:13:31 +0200 |
commit | 558f510463130937d71c3acc8242fd2058f02fa2 (patch) | |
tree | bcbda8ba455871750077e2e633d67b9dbef44e83 | |
parent | 855825e8034a441bd947429b564d43dc92a43e3f (diff) | |
download | Chimère-558f510463130937d71c3acc8242fd2058f02fa2.tar.bz2 Chimère-558f510463130937d71c3acc8242fd2058f02fa2.zip |
Improve performance of getGeoObjects for large request
One supplementary request was done for each marker!
To be done: check and improve routes.
-rw-r--r-- | chimere/models.py | 15 | ||||
-rw-r--r-- | chimere/views.py | 9 |
2 files changed, 18 insertions, 6 deletions
diff --git a/chimere/models.py b/chimere/models.py index ed84124..8446a68 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -624,10 +624,23 @@ class Marker(GeographicItem): val = values[unicode(propertymodel.id)] self.setProperty(propertymodel, val) + PROPERTIES_KEYS = ['point', 'pk', 'name', 'weight'] + @classmethod + def _getJson(cls, values, base_dct={"properties":{}}): + item = base_dct.copy() + item["geometry"] = {"type": "Point", + "coordinates": [values['point'].x, + values['point'].y]} + item["properties"]['pk'] = values['pk'] + item["properties"]['name'] = values['name'] + if values['weight']: + item["properties"]['weight'] = values['weight'] + return item + def _getItems(self, base_dct={"properties":{}}): '''Return a dict representation for json ''' - item = base_dct + item = base_dct.copy() item["geometry"] = {"type": "Point", "coordinates": [ self.point.x, self.point.y ] } diff --git a/chimere/views.py b/chimere/views.py index d10e8ec..997079f 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2008-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2008-2014 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # # RSS : Copyright (C) 2010 Pierre Clarenc <pierre.crc_AT_gmailDOTcom>, # Samuel Renard <renard.samuel_AT_gmailDOTcom>, @@ -667,10 +667,9 @@ def getGeoObjects(request, map_name, category_ids, status): 'icon_height':cat.icon.image.height, 'category_name':cat.name} } - for obj in query.filter(categories__pk=category_id).all(): - dct = base_dct.copy() - dct['properties'] = base_dct['properties'].copy() - jsons.append(obj._getItems(base_dct=dct)) + for values in query.filter(categories__pk=category_id).values( + 'point', 'pk', 'name', 'weight'): + jsons.append(Marker._getJson(values, base_dct.copy())) if not jsons: return HttpResponse('no results') data = {"type": "FeatureCollection", "features":jsons} |