diff options
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index bd6c38ff1..962fc93a1 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -25,6 +25,7 @@ import datetime import inspect from importlib import import_module from jinja2 import TemplateSyntaxError +import json import logging import os import re @@ -71,6 +72,7 @@ from ishtar_common.models_imports import ImporterModel, ImporterType, \ ImporterDefault, ImporterDefaultValues, ImporterColumn, \ ImporterDuplicateField, Regexp, ImportTarget, TargetKey, FormaterType, \ Import, TargetKeyGroup +from ishtar_common.templatetags.link_to_window import simple_link_to_window from ishtar_common.utils import get_cache, disable_for_loaddata, create_slug, \ get_all_field_names, merge_tsvectors, cached_label_changed, \ generate_relation_graph, max_size_help @@ -1598,8 +1600,8 @@ class DocumentItem(object): if can_add_doc: actions = [ ( - reverse("create-document") + "?{}={}".format(self.SLUG, - self.pk), + reverse("create-document") + "?{}={}".format( + self.SLUG, self.pk), _(u"Add document/image"), "fa fa-plus", _(u"doc./image"), @@ -1611,21 +1613,37 @@ class DocumentItem(object): class GeoItem(object): + def _geojson_serialize(self, geom_attr): + if not hasattr(self, geom_attr): + return "" + cached_label_key = 'cached_label' + if getattr(self, "CACHED_LABELS", None): + cached_label_key = self.CACHED_LABELS[-1] + geojson = serialize( + 'geojson', + self.__class__.objects.filter(pk=self.pk), + geometry_field=geom_attr, fields=(cached_label_key,)) + geojson_dct = json.loads(geojson) + features = geojson_dct.pop('features') + for idx in range(len(features)): + feature = features[idx] + lbl = feature['properties'].pop(cached_label_key) + feature['properties']['name'] = lbl + feature['properties']['id'] = self.pk + geojson_dct['features'] = features + geojson_dct['link_template'] = simple_link_to_window(self).replace( + '999999', '<pk>' + ) + geojson = json.dumps(geojson_dct) + return geojson + @property def point_2d_geojson(self): - if not hasattr(self, 'point_2d'): - return "" - return serialize('geojson', self.__class__.objects.filter(pk=self.pk), - geometry_field='point_2d', - fields=('cache_complete_id',)) + return self._geojson_serialize('point_2d') @property def multi_polygon_geojson(self): - if not hasattr(self, 'multi_polygon'): - return "" - return serialize('geojson', self.__class__.objects.filter(pk=self.pk), - geometry_field='multi_polygon', - fields=('cache_complete_id',)) + return self._geojson_serialize('multi_polygon') class BaseHistorizedItem(DocumentItem, FullSearch, Imported, JsonData, GeoItem, |