From 97d48cd3c6f409584b5cc19fbddfca917bae78fd Mon Sep 17 00:00:00 2001 From: David Sanders <> Date: Sun, 21 Apr 2024 16:46:26 +1000 Subject: Refs #34007, Refs #35359 -- Added Q.referenced_based_fields property. Thank you to Mariusz Felisiak and Natalia Bidart for the reviews. --- django/db/models/query_utils.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'django') diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py index 9be17a4a84..1bf396723e 100644 --- a/django/db/models/query_utils.py +++ b/django/db/models/query_utils.py @@ -175,6 +175,19 @@ class Q(tree.Node): def __hash__(self): return hash(self.identity) + @cached_property + def referenced_base_fields(self): + """ + Retrieve all base fields referenced directly or through F expressions + excluding any fields referenced through joins. + """ + # Avoid circular imports. + from django.db.models.sql import query + + return { + child.split(LOOKUP_SEP, 1)[0] for child in query.get_children_from_q(self) + } + class DeferredAttribute: """ -- cgit v1.3