summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Smeaton <josh.smeaton@gmail.com>2014-07-11 16:55:49 +1000
committerAnssi Kääriäinen <akaariai@gmail.com>2014-08-12 14:58:10 +0300
commit5b0375ec3e7473fcc29c21003fef80c0d0be183f (patch)
treedc8609cb7647827030adcb12c16a0d3de754f2df
parent954e7b8aad3f3925e63a0a156b7df7466895e073 (diff)
Fixed #23001 -- Fixed mixing defer and annotations
-rw-r--r--django/db/models/query.py2
-rw-r--r--tests/aggregation/tests.py25
2 files changed, 26 insertions, 1 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 013da72862..5d51a7c955 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -260,7 +260,7 @@ class QuerySet(object):
load_fields.append(field.name)
skip = None
- if load_fields and not fill_cache:
+ if load_fields:
# Some fields have been deferred, so we have to initialize
# via keyword arguments.
skip = set()
diff --git a/tests/aggregation/tests.py b/tests/aggregation/tests.py
index 6ea10278f2..b1b6199ffa 100644
--- a/tests/aggregation/tests.py
+++ b/tests/aggregation/tests.py
@@ -88,6 +88,31 @@ class BaseAggregateTestCase(TestCase):
)
self.assertEqual(b.mean_age, 34.5)
+ def test_annotate_defer(self):
+ qs = Book.objects.annotate(
+ page_sum=Sum("pages")).defer('name').filter(pk=1)
+
+ rows = [
+ (1, "159059725", 447, "The Definitive Guide to Django: Web Development Done Right")
+ ]
+ self.assertQuerysetEqual(
+ qs.order_by('pk'), rows,
+ lambda r: (r.id, r.isbn, r.page_sum, r.name)
+ )
+
+ def test_annotate_defer_select_related(self):
+ qs = Book.objects.select_related('contact').annotate(
+ page_sum=Sum("pages")).defer('name').filter(pk=1)
+
+ rows = [
+ (1, "159059725", 447, "Adrian Holovaty",
+ "The Definitive Guide to Django: Web Development Done Right")
+ ]
+ self.assertQuerysetEqual(
+ qs.order_by('pk'), rows,
+ lambda r: (r.id, r.isbn, r.page_sum, r.contact.name, r.name)
+ )
+
def test_annotate_m2m(self):
books = Book.objects.filter(rating__lt=4.5).annotate(Avg("authors__age")).order_by("name")
self.assertQuerysetEqual(