diff options
| author | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-09-30 11:26:17 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-09-30 11:26:53 +0200 |
| commit | 93a42d43a6995993b9bbcb743ab3c2a2b8414ebd (patch) | |
| tree | 1b4df989f52b02666c2bc766f990e59712935aa1 /django | |
| parent | b2a0978610413e4cd5ebb716b8bfa7803dff8d5b (diff) | |
[4.0.x] Fixed #33159 -- Reverted "Fixed #32970 -- Changed WhereNode.clone() to create a shallow copy of children."
This reverts commit e441847ecae99dd1ccd0d9ce76dbcff51afa863c.
A shallow copy is not enough because querysets can be reused and
evaluated in nested nodes, which shouldn't mutate JOIN aliases.
Thanks Michal Čihař for the report.
Backport of 903aaa35e5ceaa33bfc9b19b7f6da65ce5a91dd4 from main
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/sql/where.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py index 160d5733b8..50ff13be75 100644 --- a/django/db/models/sql/where.py +++ b/django/db/models/sql/where.py @@ -148,7 +148,11 @@ class WhereNode(tree.Node): clone = self.__class__._new_instance( children=None, connector=self.connector, negated=self.negated, ) - clone.children = self.children[:] + for child in self.children: + if hasattr(child, 'clone'): + clone.children.append(child.clone()) + else: + clone.children.append(child) return clone def relabeled_clone(self, change_map): |
