summaryrefslogtreecommitdiff
path: root/django/db/models/sql/where.py
diff options
context:
space:
mode:
authorSimon Charette <simon.charette@zapier.com>2019-08-15 23:20:57 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-08-17 11:24:35 +0200
commit8b4a43dda702fe72c254388f1be2c0c75b7a3efc (patch)
treea416e2c9bdad50b2c38ae6ca760b17bec8ae46a8 /django/db/models/sql/where.py
parent7203efb799969b4662ecb58f4cefd2a5f2e0062b (diff)
Fixed #29545 -- Fixed using filter lookups againts nested subquery expressions.
Made sql.Where resolve lhs of its child nodes. This is necessary to allow filter lookups against nested subquery expressions to properly resolve their OuterRefs to Cols. Thanks Oskar Persson for the simplified test case.
Diffstat (limited to 'django/db/models/sql/where.py')
-rw-r--r--django/db/models/sql/where.py12
1 files changed, 7 insertions, 5 deletions
diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py
index 496822c58b..bf0828dc8b 100644
--- a/django/db/models/sql/where.py
+++ b/django/db/models/sql/where.py
@@ -184,18 +184,20 @@ class WhereNode(tree.Node):
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
+ def _resolve_leaf(expr, query, *args, **kwargs):
+ if hasattr(expr, 'resolve_expression'):
+ expr = expr.resolve_expression(query, *args, **kwargs)
+ return expr
@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, 'lhs'):
+ node.lhs = cls._resolve_leaf(node.lhs, query, *args, **kwargs)
if hasattr(node, 'rhs'):
- node.rhs = cls._resolve_rhs(node.rhs, query, *args, **kwargs)
+ node.rhs = cls._resolve_leaf(node.rhs, query, *args, **kwargs)
def resolve_expression(self, *args, **kwargs):
clone = self.clone()