diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-05-05 18:38:52 +0200 | 
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2023-05-05 18:38:52 +0200 | 
| commit | 3d4ccf95e91b4a6acbe054d149d34daf43aec9c0 (patch) | |
| tree | 06deb20745ad38e8014452d004169f6e6d60675b /ishtar_common | |
| parent | a9c7ae42db56a9b44eb6f84a9e15772ad7ea6739 (diff) | |
| download | Ishtar-3d4ccf95e91b4a6acbe054d149d34daf43aec9c0.tar.bz2 Ishtar-3d4ccf95e91b4a6acbe054d149d34daf43aec9c0.zip | |
Fix precise_town search
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models.py | 4 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 28 | 
2 files changed, 29 insertions, 3 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 3e5b44d8a..c4beb0bff 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2567,9 +2567,9 @@ class Organization(Address, Merge, OwnPerms, BaseGenderedType, ValueGetter, Main              pgettext_lazy("key for text search", "type"),              "organization_type__label__iexact",          ), -        "precise_town": SearchAltName( +        "precise_town_id": SearchAltName(              pgettext_lazy("key for text search", "precise-town"), -            "precise_town__cached_label__iexact", +            "precise_town_id__cached_label",          ),      }      QA_EDIT = QuickAction( diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index b2b924992..31a96f270 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -1066,7 +1066,33 @@ def _manage_hierarchic_fields(model, dct, and_reqs):                  # TODO: improve query with "IN ()"?                  continue -            if ( +            if req.endswith("precise_town_id__cached_label"): +                val = _clean_type_val(dct.pop(req)).strip('"') +                if val.startswith('"') and val.endswith('"'): +                    val = val[1:-1] +                vals = [v.replace('"', "") for v in val.split(";")] +                req = req[:-len("__cached_label")] +                town_ids = [] +                for val in vals: +                    q = models.Town.objects.filter(cached_label__iexact=val).values_list( +                        "id", flat=True) +                    if not q.count(): +                        continue +                    town_id = q.all()[0] +                    town_ids.append(town_id) +                    reqs = Q(**{req: val}) +                    for rel_query in ("parents__", "children__"): +                        for idx in range(HIERARCHIC_LEVELS): +                            k = rel_query * (idx + 1) + "pk" +                            q = models.Town.objects.filter( +                                **{k: town_id}).values_list("id", flat=True) +                            if not q.count(): +                                break +                            town_ids += list(q.all()) +                main_req = Q(**{req + "__in": town_ids}) +                and_reqs.append(main_req) + +            elif (                  req.endswith("town__pk")                  or req.endswith("towns__pk")                  or req.endswith("town__cached_label__iexact") | 
