From a0dc9d6fbb3486ff1a9ee8959abbb141073b4449 Mon Sep 17 00:00:00 2001 From: eriktelepovsky Date: Mon, 20 Dec 2021 16:21:03 +0100 Subject: [PATCH 1/3] fixed isnull, istrue, isfalse lookups/operators --- advanced_filters/forms.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/advanced_filters/forms.py b/advanced_filters/forms.py index efb50d1..352858f 100644 --- a/advanced_filters/forms.py +++ b/advanced_filters/forms.py @@ -96,12 +96,10 @@ def _build_query_dict(self, formdata=None): if self.is_valid() and formdata is None: formdata = self.cleaned_data key = "{field}__{operator}".format(**formdata) - if formdata['operator'] == "isnull": - return {key: None} - elif formdata['operator'] == "istrue": - return {formdata['field']: True} - elif formdata['operator'] == "isfalse": - return {formdata['field']: False} + + if formdata['operator'] in ["isnull", "istrue", "isfalse"]: + return {key: True if str(formdata['value']).lower() in ['1', 'true'] else False} + return {key: formdata['value']} @staticmethod @@ -115,6 +113,11 @@ def _parse_query_dict(query_data, model): return query_data parts = query_data['field'].split('__') + boolean_lookups = ['isnull', 'istrue', 'isfalse'] + for boolean_lookup in boolean_lookups: + if query_data['field'].endswith(f'__{boolean_lookup}'): + query_data['operator'] = boolean_lookup + if len(parts) < 2: field = parts[0] else: @@ -132,18 +135,11 @@ def _parse_query_dict(query_data, model): else: mfield = mfield[-1] # get the field object - if query_data['value'] is None: - query_data['operator'] = "isnull" - elif query_data['value'] is True: - query_data['operator'] = "istrue" - elif query_data['value'] is False: - query_data['operator'] = "isfalse" + if isinstance(mfield, DateField): + # this is a date/datetime field + query_data['operator'] = "range" # default else: - if isinstance(mfield, DateField): - # this is a date/datetime field - query_data['operator'] = "range" # default - else: - query_data['operator'] = operator # default + query_data['operator'] = operator # default if isinstance(query_data.get('value'), list) and query_data['operator'] == 'range': From 4f425e3e759ff5b99048c19fe15a778c1361a1fe Mon Sep 17 00:00:00 2001 From: eriktelepovsky Date: Mon, 20 Dec 2021 19:58:37 +0100 Subject: [PATCH 2/3] removed select2("destroy") from inputs --- advanced_filters/static/advanced-filters/advanced-filters.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced_filters/static/advanced-filters/advanced-filters.js b/advanced_filters/static/advanced-filters/advanced-filters.js index 3e3865a..bb22a58 100644 --- a/advanced_filters/static/advanced-filters/advanced-filters.js +++ b/advanced_filters/static/advanced-filters/advanced-filters.js @@ -139,7 +139,7 @@ var OperatorHandlers = function($) { $(this).off("change"); }); $('.form-row input.query-value').each(function() { - $(this).select2("destroy"); + // $(this).select2("destroy"); }); }; }; From ab4f9df502d9fe6b0652ca664b36e88a8090a26b Mon Sep 17 00:00:00 2001 From: eriktelepovsky Date: Mon, 24 Jan 2022 12:28:49 +0100 Subject: [PATCH 3/3] removed duplicated code --- advanced_filters/forms.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/advanced_filters/forms.py b/advanced_filters/forms.py index 352858f..f1de49b 100644 --- a/advanced_filters/forms.py +++ b/advanced_filters/forms.py @@ -113,10 +113,6 @@ def _parse_query_dict(query_data, model): return query_data parts = query_data['field'].split('__') - boolean_lookups = ['isnull', 'istrue', 'isfalse'] - for boolean_lookup in boolean_lookups: - if query_data['field'].endswith(f'__{boolean_lookup}'): - query_data['operator'] = boolean_lookup if len(parts) < 2: field = parts[0]