summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/views_api.py2
-rw-r--r--ishtar_common/views_item.py28
2 files changed, 20 insertions, 10 deletions
diff --git a/ishtar_common/views_api.py b/ishtar_common/views_api.py
index fed1dc14e..d6d4a602f 100644
--- a/ishtar_common/views_api.py
+++ b/ishtar_common/views_api.py
@@ -118,6 +118,7 @@ class GISExportAPI(GISBaseImportView, GISAPIView):
try:
importer_class = importer.get_importer_class()
import_key = importer.get_gis_import_key()
+ geo_type = importer.gis_type.txt_idx
cols, col_names = importer.get_columns(importer_class=importer_class)
obj_name = importer_class.OBJECT_CLS.__name__.lower()
return get_item(importer_class.OBJECT_CLS, "get_" + obj_name, obj_name,
@@ -126,6 +127,7 @@ class GISExportAPI(GISBaseImportView, GISAPIView):
no_link=True, col_names=col_names,
col_types=importer.get_columns_types(),
geo_import_key=import_key,
+ geo_type=geo_type,
**dct
)
except ImporterError as e:
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 83c84ae78..af5fdb479 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1875,9 +1875,8 @@ def _format_geojson(rows, link_template, display_polygon):
def _get_data_from_query(items, query_table_cols, extra_request_keys,
- geo_fields=None, geo_import_key=None, q_slice=None):
+ geo_fields=None, geo_import_key=None, geo_type=None, q_slice=None):
# TODO: manage data json field
-
for query_keys in query_table_cols:
if not isinstance(query_keys, (tuple, list)):
query_keys = [query_keys]
@@ -1917,10 +1916,10 @@ def _get_data_from_query(items, query_table_cols, extra_request_keys,
values.append("lock_user_id")
values = [v for v in values if v] # filter empty values
if q_slice:
- result = items[q_slice[0]:q_slice[1]].values_list(*values)
+ result = items[q_slice[0]:q_slice[1] + 1].values_list(*values)
else:
result = items.values_list(*values)
- if not geo_import_key:
+ if not geo_import_key and not geo_type:
return result
# get correct data with geo_import_key match
@@ -1941,11 +1940,16 @@ def _get_data_from_query(items, query_table_cols, extra_request_keys,
column_index[k] = idx + 1
new_geo_values = {}
- q2 = items.filter(**{f"{geo_prefix}geodata__import_key": geo_import_key})
- if q_slice:
- q2 = q2[q_slice[0]:q_slice[1]]
- for geo_result in q2.values_list(*geo_values):
- new_geo_values[geo_result[0]] = geo_result
+ q = items.model.objects.filter(id__in=[v[0] for v in result])
+ if geo_type:
+ q2 = q.filter(**{f"{geo_prefix}geodata__data_type__txt_idx": geo_type})
+ for geo_result in q2.values_list(*geo_values):
+ new_geo_values[geo_result[0]] = geo_result
+ if geo_import_key:
+ q2 = q.filter(**{f"{geo_prefix}geodata__import_key": geo_import_key})
+ for geo_result in q2.values_list(*geo_values):
+ if geo_result[0] not in new_geo_values:
+ new_geo_values[geo_result[0]] = geo_result
new_values = []
for v in result:
v = list(v)
@@ -2522,6 +2526,7 @@ def get_item(
)
geo_import_key = dct.get("geo_import_key", None)
+ geo_type = dct.get("geo_type", None)
fields = [model._meta.get_field(k) for k in get_all_field_names(model)]
@@ -3063,7 +3068,10 @@ def get_item(
geo_fields=geo_fields, q_slice=q_slice
)
elif data_type != "csv" and getattr(model, "NEW_QUERY_ENGINE", False):
- datas = _get_data_from_query(items, query_table_cols, my_extra_request_keys, geo_import_key=geo_import_key, q_slice=q_slice)
+ datas = _get_data_from_query(
+ items, query_table_cols, my_extra_request_keys,
+ geo_import_key=geo_import_key, geo_type=geo_type, q_slice=q_slice,
+ )
else:
if q_slice:
items = items[q_slice[0]:q_slice[1]]