diff options
| -rw-r--r-- | ishtar_common/views_item.py | 37 | 
1 files changed, 22 insertions, 15 deletions
| diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 15c1351b6..587c8e998 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -906,18 +906,25 @@ def _manage_hierarchic_fields(dct, and_reqs):                  val = _clean_type_val(dct.pop(req)).strip('"')                  if val.startswith('"') and val.endswith('"'):                      val = val[1:-1] -                reqs = Q(**{req: val}) -                base_req = req[:] -                for idx in range(HIERARCHIC_LEVELS): -                    req = req[:-(len(suffix))] + 'parents__' + suffix -                    q = Q(**{req: val}) -                    reqs |= q -                req = base_req[:] -                for idx in range(HIERARCHIC_LEVELS): -                    req = req[:-(len(suffix))] + 'children__' + suffix -                    q = Q(**{req: val}) -                    reqs |= q -                and_reqs.append(reqs) +                vals = [v.replace('"', '') for v in val.split(';')] +                main_req = None +                for val in vals: +                    reqs = Q(**{req: val}) +                    nreq = base_req = req[:] +                    for idx in range(HIERARCHIC_LEVELS): +                        nreq = nreq[:-(len(suffix))] + 'parents__' + suffix +                        q = Q(**{nreq: val}) +                        reqs |= q +                    nreq = base_req[:] +                    for idx in range(HIERARCHIC_LEVELS): +                        nreq = nreq[:-(len(suffix))] + 'children__' + suffix +                        q = Q(**{nreq: val}) +                        reqs |= q +                    if not main_req: +                        main_req = reqs +                    else: +                        main_req |= reqs +                and_reqs.append(main_req)                  # TODO: improve query with "IN ()"?                  continue @@ -938,9 +945,9 @@ def _manage_hierarchic_fields(dct, and_reqs):                          or req.endswith(k_hr + '__label__iexact'):                      val = _clean_type_val(dct.pop(req)) -                    if u'";"' in val: +                    if '";"' in val:                          # OR request -                        values = val.split(u";") +                        values = val.split(";")                      else:                          values = [val]                      base_req = req[:] @@ -1730,7 +1737,7 @@ def get_item(model, func_name, default_name, extra_request_keys=None,          items_nb = items.values('pk').aggregate(Count('pk'))['pk__count']          if count:              return items_nb -        # print(str(items.query).encode('utf-8')) +        # print(str(items.values("id").query).encode('utf-8'))          if search_vector:  # for serialization              dct['search_vector'] = search_vector | 
