From 6a6ce77aacfecf7d7b6a719c997076c87e338604 Mon Sep 17 00:00:00 2001 From: alec_dev Date: Tue, 5 May 2026 09:37:36 -0500 Subject: [PATCH] Fix aggregated relation parsing for QB stored queries --- .../backend/stored_queries/queryfieldspec.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/specifyweb/backend/stored_queries/queryfieldspec.py b/specifyweb/backend/stored_queries/queryfieldspec.py index e295b0778f0..e9c4f2867f6 100644 --- a/specifyweb/backend/stored_queries/queryfieldspec.py +++ b/specifyweb/backend/stored_queries/queryfieldspec.py @@ -253,10 +253,21 @@ def from_stringid(cls, stringid: str, is_relation: bool): node = table extracted_fieldname, date_part = extract_date_part(field_name) - field = node.get_field(extracted_fieldname, strict=False) + relation_already_in_path = ( + is_relation + and len(join_path) > 0 + and isinstance(join_path[-1], Relationship) + and join_path[-1].type not in {"many-to-one", "one-to-one"} + and join_path[-1].name.lower() == extracted_fieldname.lower() + ) + field = ( + None + if relation_already_in_path + else node.get_field(extracted_fieldname, strict=False) + ) tree_rank_name = None - if field is None: # try finding tree + if field is None and not relation_already_in_path: # try finding tree tree_rank_name, field = find_tree_and_field(node, extracted_fieldname) if tree_rank_name: tree_rank = TreeRankQuery.create(