diff options
| author | Simon Charette <simon.charette@zapier.com> | 2019-08-15 23:20:57 -0400 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-08-17 11:24:35 +0200 |
| commit | 8b4a43dda702fe72c254388f1be2c0c75b7a3efc (patch) | |
| tree | a416e2c9bdad50b2c38ae6ca760b17bec8ae46a8 /django/db/models/sql/where.py | |
| parent | 7203efb799969b4662ecb58f4cefd2a5f2e0062b (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.py | 12 |
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() |
