diff options
| author | 朱穆穆 <mumu.zhu@feat.com> | 2022-12-29 10:23:46 +0800 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-01-24 10:52:01 +0100 |
| commit | f23a85337a93cef7bb351f17e61f50841953a74a (patch) | |
| tree | 9ae0e8b809d3f19ef146c0f1d3ec1b3c707de80f /django/db/models/sql/compiler.py | |
| parent | b332a96cd721defb6ff13ba1bc57958a984f0773 (diff) | |
[4.2.x] Fixed #34227 -- Fixed QuerySet.select_related() with multi-level FilteredRelation.
Backport of d3c93cdc597e0efc2815111c04dd5a427432ed37 from main
Diffstat (limited to 'django/db/models/sql/compiler.py')
| -rw-r--r-- | django/db/models/sql/compiler.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 7c433b3f06..c07076d54a 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -1274,6 +1274,9 @@ class SQLCompiler: if from_obj: final_field.remote_field.set_cached_value(from_obj, obj) + def local_setter_noop(obj, from_obj): + pass + def remote_setter(name, obj, from_obj): setattr(from_obj, name, obj) @@ -1295,7 +1298,11 @@ class SQLCompiler: "model": model, "field": final_field, "reverse": True, - "local_setter": partial(local_setter, final_field), + "local_setter": ( + partial(local_setter, final_field) + if len(joins) <= 2 + else local_setter_noop + ), "remote_setter": partial(remote_setter, name), "from_parent": from_parent, } |
