summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2022-05-23 23:03:57 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2022-05-23 23:03:57 +0200
commit61b2b6e73b925735b9ee5f9a018bb599b0900c49 (patch)
tree3f98c413fca071b24828acb475647e9a5784a8bb /ishtar_common/views_item.py
parent9122bc96d1c755e55b65b0f2d9c48f55965e61a9 (diff)
downloadIshtar-61b2b6e73b925735b9ee5f9a018bb599b0900c49.tar.bz2
Ishtar-61b2b6e73b925735b9ee5f9a018bb599b0900c49.zip
Search: fix relation type searches
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py41
1 files changed, 25 insertions, 16 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index 0cb61eee2..9543d74f5 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1114,6 +1114,22 @@ def _manage_clean_search_field(dct, exclude=None):
exclude[base_key + "__exact"] = ""
+def _get_relation_type_dict(my_relation_types_prefix, dct):
+ relation_types = {}
+ for rtype_key in my_relation_types_prefix:
+ relation_types[my_relation_types_prefix[rtype_key]] = set()
+ for rtype_key in my_relation_types_prefix:
+ for keys in list(dct.keys()):
+ if type(keys) not in (list, tuple):
+ keys = [keys]
+ for k in keys:
+ if k.startswith(rtype_key):
+ relation_types[my_relation_types_prefix[rtype_key]].add(
+ dct.pop(k)
+ )
+ return relation_types
+
+
def _manage_relation_types(relation_types, dct, query, or_reqs):
for rtype_prefix in relation_types:
vals = relation_types[rtype_prefix]
@@ -1140,10 +1156,11 @@ def _manage_relation_types(relation_types, dct, query, or_reqs):
if k.endswith("year"):
k += "__exact"
alt_dct[rtype_prefix + "right_relations__right_record__" + k] = val
- if not dct:
+ # TODO: AFAC
+ #if not dct:
# fake condition to trick Django (1.4): without it only the
# alt_dct is managed
- query &= Q(pk__isnull=False)
+ # query &= Q(pk__isnull=False)
query |= Q(**alt_dct)
for k, or_req in or_reqs:
altor_dct = alt_dct.copy()
@@ -1841,18 +1858,10 @@ def get_item(
# manage relations types
if "relation_types" not in my_relation_types_prefix:
my_relation_types_prefix["relation_types"] = ""
- relation_types = {}
- for rtype_key in my_relation_types_prefix:
- relation_types[my_relation_types_prefix[rtype_key]] = set()
- for rtype_key in my_relation_types_prefix:
- for keys in list(dct.keys()):
- if type(keys) not in (list, tuple):
- keys = [keys]
- for k in keys:
- if k.startswith(rtype_key):
- relation_types[my_relation_types_prefix[rtype_key]].add(
- dct.pop(k)
- )
+
+ relation_types = _get_relation_type_dict(my_relation_types_prefix, dct)
+ exc_relation_types =_get_relation_type_dict(my_relation_types_prefix,
+ excluded_dct)
_manage_bool_fields(
model, my_bool_fields, my_reversed_bool_fields, dct, or_reqs
@@ -1893,9 +1902,9 @@ def get_item(
query = _construct_query(relation_types, dct, or_reqs, and_reqs)
exc_query = None
- if excluded_dct or exc_and_reqs or exc_or_reqs:
+ if excluded_dct or exc_and_reqs or exc_or_reqs or exc_relation_types:
exc_query = _construct_query(
- relation_types, excluded_dct, exc_or_reqs, exc_and_reqs
+ exc_relation_types, excluded_dct, exc_or_reqs, exc_and_reqs
)
if query_own: