summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/sql/query.py2
-rw-r--r--tests/defer/tests.py5
2 files changed, 6 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 9492e5bd58..0473654fe1 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -649,7 +649,7 @@ class Query:
# models.
workset = {}
for model, values in seen.items():
- for field in model._meta.fields:
+ for field in model._meta.local_fields:
if field in values:
continue
m = field.model._meta.concrete_model
diff --git a/tests/defer/tests.py b/tests/defer/tests.py
index 6badd7056e..a3ef1c58b1 100644
--- a/tests/defer/tests.py
+++ b/tests/defer/tests.py
@@ -188,6 +188,11 @@ class BigChildDeferTests(AssertionMixin, TestCase):
self.assertEqual(obj.value, "foo")
self.assertEqual(obj.other, "bar")
+ def test_defer_subclass_both(self):
+ # Deferring fields from both superclass and subclass works.
+ obj = BigChild.objects.defer("other", "value").get(name="b1")
+ self.assert_delayed(obj, 2)
+
def test_only_baseclass_when_subclass_has_added_field(self):
# You can retrieve a single field on a baseclass
obj = BigChild.objects.only("name").get(name="b1")