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, | 
