diff options
| -rw-r--r-- | ishtar_common/views_item.py | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 631a46c96..ccc514070 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -36,7 +36,8 @@ from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType from django.contrib.gis.geos import GEOSException from django.core.cache import cache -from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist, PermissionDenied +from django.core.exceptions import FieldDoesNotExist, FieldError, ObjectDoesNotExist,\ + PermissionDenied from django.db.models import ( F, Q, @@ -1942,7 +1943,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, geo_type=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)): @@ -1982,10 +1984,15 @@ def _get_data_from_query(items, query_table_cols, extra_request_keys, values.append("locked") 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) - else: - result = items.values_list(*values) + try: + if q_slice: + result = items[q_slice[0]:q_slice[1]].values_list(*values) + else: + result = items.values_list(*values) + except FieldError as e: + error = str(e)[:100] + " (...)" + error = str(_("Importer configuration error: {}.")).format(error) + raise ValueError(error) if not geo_import_key and not geo_type: return result @@ -3097,7 +3104,7 @@ def get_item( # count in cache n = datetime.datetime.now() - search_vector = request_items.get("search_vector", "").strip() + search_vector = (request_items.get("search_vector", "") or "").strip() # cache only for GUI search cache_search = not selected_ids and ( @@ -3305,15 +3312,23 @@ def get_item( geo_fields = query_table_cols[-4:] else: geo_fields = query_table_cols[-2:] - datas = _get_data_from_query( - items, query_table_cols, my_extra_request_keys, - geo_fields=geo_fields, q_slice=q_slice - ) + try: + datas = _get_data_from_query( + items, query_table_cols, my_extra_request_keys, + geo_fields=geo_fields, q_slice=q_slice + ) + except ValueError as e: + data = json.dumps({"error": str(e)}) + return HttpResponse(data, content_type="application/json") 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, geo_type=geo_type, q_slice=q_slice, - ) + try: + 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, + ) + except ValueError as e: + data = json.dumps({"error": str(e)}) + return HttpResponse(data, content_type="application/json") else: if q_slice: items = items[q_slice[0]:q_slice[1]] |
