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.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 839480ba7..eaf05f027 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1241,11 +1241,22 @@ def _manage_relation_types(relation_types, dct, query, or_reqs):
return query
-def _construct_query(relation_types, dct, or_reqs, and_reqs):
+def _construct_query(relation_types, dct, or_reqs, and_reqs, excluded_relation=False):
+ # excluded -> reverse logic
+ if excluded_relation:
+ and_reqs, or_reqs = or_reqs, and_reqs
+ for key in dct:
+ if isinstance(dct[key], str):
+ values = [v for v in dct[key].split(";") if v]
+ else:
+ values = [dct[key]]
+ for value in values:
+ or_reqs.append((key, {key: value}))
+ dct = {}
# manage multi value not already managed
for key in list(dct.keys()):
- if type(dct[key]) == str and ";" in dct[key]:
+ if isinstance(dct[key], str) and ";" in dct[key]:
values = [v for v in dct[key].split(";") if v]
if not values:
dct.pop(key)
@@ -1267,11 +1278,16 @@ def _construct_query(relation_types, dct, or_reqs, and_reqs):
or_reqs.append((first_key, {other_key: value}))
query = Q(**dct)
- for k, or_req in or_reqs:
+ for or_req in or_reqs:
alt_dct = dct.copy()
- alt_dct.pop(k)
- alt_dct.update(or_req)
- query |= Q(**alt_dct)
+ if isinstance(or_req, (tuple, list)):
+ k, or_req = or_req
+ if k in alt_dct:
+ alt_dct.pop(k)
+ alt_dct.update(or_req)
+ query |= Q(**alt_dct)
+ else:
+ query |= (Q(**alt_dct) & Q(or_req))
query = _manage_relation_types(relation_types, dct, query, or_reqs)
done = []
@@ -2073,7 +2089,8 @@ def get_item(
exc_query = None
if excluded_dct or exc_and_reqs or exc_or_reqs or exc_relation_types:
exc_query = _construct_query(
- exc_relation_types, excluded_dct, exc_or_reqs, exc_and_reqs
+ exc_relation_types, excluded_dct, exc_or_reqs, exc_and_reqs,
+ excluded_relation=True
)
if query_own: