summaryrefslogtreecommitdiff
path: root/django/db/models/sql/where.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/db/models/sql/where.py')
-rw-r--r--django/db/models/sql/where.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py
index 9d3d6a9366..496822c58b 100644
--- a/django/db/models/sql/where.py
+++ b/django/db/models/sql/where.py
@@ -183,8 +183,23 @@ class WhereNode(tree.Node):
def is_summary(self):
return any(child.is_summary for child in self.children)
+ @staticmethod
+ def _resolve_rhs(rhs, query, *args, **kwargs):
+ if hasattr(rhs, 'resolve_expression'):
+ rhs = rhs.resolve_expression(query, *args, **kwargs)
+ return rhs
+
+ @classmethod
+ def _resolve_node(cls, node, query, *args, **kwargs):
+ if hasattr(node, 'children'):
+ for child in node.children:
+ cls._resolve_node(child, query, *args, **kwargs)
+ if hasattr(node, 'rhs'):
+ node.rhs = cls._resolve_rhs(node.rhs, query, *args, **kwargs)
+
def resolve_expression(self, *args, **kwargs):
clone = self.clone()
+ clone._resolve_node(clone, *args, **kwargs)
clone.resolved = True
return clone