diff options
| author | Jeremy Kerr <jk@ozlabs.org> | 2017-08-31 08:59:45 +0800 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2017-08-31 09:35:05 -0400 |
| commit | 84b7cb7df00192b2f804e2c6fd98b78b5bfd1ffa (patch) | |
| tree | 8ce9b667e5bf0b462a3d933b1e7afb866dd3b8a5 | |
| parent | e5bd585c6eb1e13e2f8aac030b33c077b0b70c05 (diff) | |
Fixed #28549 -- Fixed QuerySet.defer() with super and subclass fields.
Previously, deferring fields in different classes didn't omit the
superclass' deferred field.
Thanks Simon Charette for the suggested fix.
| -rw-r--r-- | django/db/models/sql/query.py | 2 | ||||
| -rw-r--r-- | tests/defer/tests.py | 5 |
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") |
