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