diff options
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r-- | ishtar_common/views_item.py | 75 |
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 |