diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/views_item.py | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 7ad25876a..eb37c9d62 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -1599,6 +1599,18 @@ def _manage_hierarchic_fields(model, dct, and_reqs): break +def __dict_add(dct, key, value, merge_char=";"): + """ + Create dict entry if no value. + Merge with merge_char if a value exists. + """ + if key in dct: + dct[key] += merge_char + else: + dct[key] = "" + dct[key] += value + + def _manage_clean_search_field(dct, exclude=None, reverse=False, related_name_fields=None): related_names = related_name_fields if related_name_fields else [] for k in list(dct.keys()): @@ -1609,24 +1621,35 @@ def _manage_clean_search_field(dct, exclude=None, reverse=False, related_name_fi dct[k] = _clean_type_val(dct[k]) if "*" not in dct[k] or k.endswith("regex"): continue - value = dct.pop(k).strip() + + values = dct.pop(k).strip().split(";") base_key = k[:] if k.endswith("__iexact"): base_key = k[:-len("__iexact")] - if value == "*": - if k in related_names or not reverse: - dct[base_key + "__isnull"] = False - if exclude is not None and k.endswith("__iexact"): + + for value in values: + # get syntax for each value + if "*" not in value: + # this value has no wild card + __dict_add(dct, k, value) + continue + + if value == "*": + # search for exists or not exists + if k in related_names or not reverse: + dct[base_key + "__isnull"] = False + if exclude is not None and k.endswith("__iexact"): + exclude[base_key + "__exact"] = "" + continue + + if value.startswith("*"): + value = value[1:] + if value.endswith("*"): + value = value[:-1] + if value: + __dict_add(dct, base_key + "__icontains", value) + elif exclude is not None: exclude[base_key + "__exact"] = "" - continue - if value.startswith("*"): - value = value[1:] - if value.endswith("*"): - value = value[:-1] - if value: - dct[base_key + "__icontains"] = value - elif exclude is not None: - exclude[base_key + "__exact"] = "" def _get_relation_type_dict(my_relation_types_prefix, dct): |
