diff options
| -rw-r--r-- | ishtar_common/views_api.py | 2 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 28 |
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]] |
