Fixed #11789 -- Fixed aggregates so it interacts with QuerySet none() in a way consistent with other empty query sets. Thanks alexr for the report and patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16254 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Ramiro Morales 2011-05-21 16:54:25 +00:00
parent f60d428463
commit a8598c7de2
2 changed files with 15 additions and 0 deletions

View File

@ -1132,6 +1132,14 @@ class EmptyQuerySet(QuerySet):
""" """
return 0 return 0
def aggregate(self, *args, **kwargs):
"""
Return a dict mapping the aggregate names to None
"""
for arg in args:
kwargs[arg.default_alias] = arg
return dict([(key, None) for key in kwargs])
# EmptyQuerySet is always an empty result in where-clauses (and similar # EmptyQuerySet is always an empty result in where-clauses (and similar
# situations). # situations).
value_annotation = False value_annotation = False

View File

@ -662,6 +662,13 @@ class AggregationTests(TestCase):
{"pk__count": None} {"pk__count": None}
) )
def test_none_call_before_aggregate(self):
# Regression for #11789
self.assertEqual(
Author.objects.none().aggregate(Avg('age')),
{'age__avg': None}
)
def test_annotate_and_join(self): def test_annotate_and_join(self):
self.assertEqual( self.assertEqual(
Author.objects.annotate(c=Count("friends__name")).exclude(friends__name="Joe").count(), Author.objects.annotate(c=Count("friends__name")).exclude(friends__name="Joe").count(),