summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/views_item.py51
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):