diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-10-05 15:57:40 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2020-10-05 15:57:40 +0200 |
commit | 8abe93913dd3be07a68cba2d4715381efa44a883 (patch) | |
tree | 6d5b89847373ecdbcc7ec0ad44150c708547b10a /ishtar_common | |
parent | 09cd9c4c7c6c80830fee367b144ecf0d4547dfb1 (diff) | |
download | Ishtar-8abe93913dd3be07a68cba2d4715381efa44a883.tar.bz2 Ishtar-8abe93913dd3be07a68cba2d4715381efa44a883.zip |
Search: fix many town search
Diffstat (limited to 'ishtar_common')
-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 |