From c2e2ca611a9a5f6e5521dcd858dae6f926ee217c Mon Sep 17 00:00:00 2001 From: Akhil Narang Date: Thu, 8 Jan 2026 16:34:27 +0530 Subject: [PATCH] fix(query): handle string argument with between Prevents crash when filter value doesn't exist (example, invalid Fiscal Year) Signed-off-by: Akhil Narang --- frappe/database/query.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/frappe/database/query.py b/frappe/database/query.py index 6d54894508..ba675c077a 100644 --- a/frappe/database/query.py +++ b/frappe/database/query.py @@ -567,8 +567,17 @@ class Engine: _value = _apply_date_field_filter_conversion(_value, _operator, doctype or self.doctype, field) # For Datetime fields with date values and 'between' operator, convert to datetime range to match db_query - if _operator.lower() == "between" and isinstance(_value, list | tuple) and len(_value) == 2: - _value = _apply_datetime_field_filter_conversion(_value, doctype or self.doctype, field) + if _operator.lower() == "between": + if isinstance(_value, list | tuple) and len(_value) == 2: + _value = _apply_datetime_field_filter_conversion(_value, doctype or self.doctype, field) + elif isinstance(_value, str): + from frappe.model.db_query import get_between_date_filter + + target_meta = frappe.get_meta(doctype or self.doctype) + df = target_meta.get_field(field) + _value = tuple( + v.strip().strip("'") for v in get_between_date_filter(_value, df).split(" AND ") + ) if not _value and isinstance(_value, list | tuple | set): _value = ("",)