From 7ca43bf432f679dab4a834e81ad5b708fbbb06b0 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 3 Jul 2023 18:11:28 +0200 Subject: 🐛 Fix "*" search for text fields (refs #5325) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ishtar_common/views_item.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'ishtar_common/views_item.py') diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index e2214d5dc..1cb0b80f2 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -1209,7 +1209,7 @@ def _manage_hierarchic_fields(model, dct, and_reqs): break -def _manage_clean_search_field(dct, exclude=None): +def _manage_clean_search_field(dct, exclude=None, reverse=False): for k in list(dct.keys()): # clean quoted search field if type(dct[k]) != str: @@ -1221,10 +1221,10 @@ def _manage_clean_search_field(dct, exclude=None): value = dct.pop(k).strip() base_key = k[:-len("__iexact")] if value == "*": - dct[base_key + "__isnull"] = False - # TODO search - #if exclude is not None: - # exclude[base_key + "__exact"] = "" + if not reverse: + dct[base_key + "__isnull"] = False + if exclude is not None: + exclude[base_key + "__exact"] = "" continue if value.startswith("*"): value = value[1:] @@ -1301,6 +1301,8 @@ def _construct_query(relation_types, dct, or_reqs, and_reqs, excluded_relation=F values = [v for v in dct[key].split(";") if v] else: values = [dct[key]] + if not values: + values = [""] # filter empty value for value in values: or_reqs.append((key, {key: value})) dct = {} @@ -2132,7 +2134,7 @@ def get_item( updated_excluded = {} _manage_clean_search_field(dct, updated_excluded) - _manage_clean_search_field(excluded_dct, dct) + _manage_clean_search_field(excluded_dct, dct, reverse=True) if updated_excluded: excluded_dct.update(updated_excluded) -- cgit v1.2.3