summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py75
1 files changed, 58 insertions, 17 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index e60358913..d80de34c7 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -537,16 +537,43 @@ def revert_item(model):
HIERARCHIC_LEVELS = 5
-HIERARCHIC_FIELDS = [
- "periods",
- "period",
- "unit",
- "material_types",
- "material_type",
- "conservatory_state",
- "object_types",
- "source_type",
-]
+
+LIST_FIELDS = { # key: hierarchic depth
+ "periods": HIERARCHIC_LEVELS,
+ "period": HIERARCHIC_LEVELS,
+ "unit": HIERARCHIC_LEVELS,
+ "material_types": HIERARCHIC_LEVELS,
+ "material_type": HIERARCHIC_LEVELS,
+ "conservatory_state": HIERARCHIC_LEVELS,
+ "object_types": HIERARCHIC_LEVELS,
+ "source_type": HIERARCHIC_LEVELS,
+ "batch": 0,
+ "preservation_to_considers": 0,
+ "integrities": 0,
+ "remarkabilities": 0,
+ "checked_type": 0,
+ "material_type_quality": 0,
+ "object_type_quality": 0,
+ "communicabilities": 0,
+ "alterations": 0,
+ "alteration_causes": 0,
+ "treatment_emergency": 0,
+ "cultural_attributions": 0,
+ "remains": 0,
+ "dating_type": 0,
+ "quality": 0,
+ "operation_type": 0,
+ "report_processing": 0,
+ "record_quality_type": 0,
+ "data_type": 0,
+ "origin": 0,
+ "provider": 0,
+ "excavation_technics": 0,
+ "activity": 0,
+ "identification": 0,
+}
+
+HIERARCHIC_FIELDS = list(LIST_FIELDS.keys())
def _get_values(request, val):
@@ -1193,19 +1220,33 @@ def _manage_hierarchic_fields(model, dct, and_reqs):
# manage search text by label
if "*" in val:
suffix = lbl_name + "__icontains"
- val = val.replace("*", "")
else:
suffix = lbl_name + "__iexact"
+ current_values = val.strip().split("*")
req = req[: -(len(base_suffix))] + suffix
+ else:
+ current_values = [val]
+ new_req = None
+ for idx, nval in enumerate(current_values):
+ if not idx:
+ new_req = Q(**{req: nval})
+ else:
+ new_req &= Q(**{req: nval})
if not reqs:
- reqs = Q(**{req: val})
+ reqs = new_req
else:
- reqs |= Q(**{req: val})
- for idx in range(HIERARCHIC_LEVELS):
+ reqs |= new_req
+ hierarchic_levels = LIST_FIELDS[k_hr] if k_hr in LIST_FIELDS \
+ else HIERARCHIC_LEVELS
+ for idx in range(hierarchic_levels):
req = req[: -(len(suffix))] + "parent__" + suffix
- q = Q(**{req: val})
- reqs |= q
+ for idx, nval in enumerate(current_values):
+ if not idx:
+ new_req = Q(**{req: nval})
+ else:
+ new_req &= Q(**{req: nval})
+ reqs |= new_req
# TODO: improve query with "IN ()"?
if reqs:
and_reqs.append(reqs)
@@ -1976,7 +2017,7 @@ def get_item(
continue
key = k[:]
if key.startswith("searchprefix_"):
- key = key[len("searchprefix_") :]
+ key = key[len("searchprefix_"):]
dct_request_items[key] = request_items[k]
request_items = dct_request_items