summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
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
commit8abe93913dd3be07a68cba2d4715381efa44a883 (patch)
tree6d5b89847373ecdbcc7ec0ad44150c708547b10a /ishtar_common
parent09cd9c4c7c6c80830fee367b144ecf0d4547dfb1 (diff)
downloadIshtar-8abe93913dd3be07a68cba2d4715381efa44a883.tar.bz2
Ishtar-8abe93913dd3be07a68cba2d4715381efa44a883.zip
Search: fix many town search
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/views_item.py37
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