summaryrefslogtreecommitdiff
path: root/django/db/models/sql
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2023-05-31 18:04:17 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-06-01 20:27:06 +0100
commit738386470d899c61cb1980233c1e7872ba78e679 (patch)
tree22a61a0b82c4fbec2faf15d3527dbfcf7b92c047 /django/db/models/sql
parentdae052d823dd66edcd0dd7fe5542d2c6a3a498d0 (diff)
[4.2.x] Fixed #34612 -- Fixed QuerySet.only() crash on reverse relationships.
Regression in b3db6c8dcb5145f7d45eff517bcd96460475c879. Thanks Ian Cubitt for the report. This also corrected test_inheritance_deferred2() test which was previously properly defined and marked as an expected failure but was then wrongly adjusted to mask the lack of support for per-alias deferral that was fixed by #21204. Backport of 2cf76f2d5d1aa16acfadaf53db3d30128a34b088 from main
Diffstat (limited to 'django/db/models/sql')
-rw-r--r--django/db/models/sql/query.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index eda37d15f0..97c0bb4a08 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -766,7 +766,13 @@ class Query(BaseExpression):
# Only include fields mentioned in the mask.
for field_name, field_mask in mask.items():
field = opts.get_field(field_name)
- field_select_mask = select_mask.setdefault(field, {})
+ # Retrieve the actual field associated with reverse relationships
+ # as that's what is expected in the select mask.
+ if field in opts.related_objects:
+ field_key = field.field
+ else:
+ field_key = field
+ field_select_mask = select_mask.setdefault(field_key, {})
if field_mask:
if not field.is_relation:
raise FieldError(next(iter(field_mask)))