summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py42
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,