From 84ce18fc9bbb8a7debd8904f746ae8c57844d291 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 14 Mar 2009 04:32:52 +0000 Subject: [PATCH] Fixed #10425 -- Corrected the interaction of .count() with .annotate() when .values() is also involved. Thanks to kmassey for the report. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10053 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/sql/query.py | 3 ++- tests/regressiontests/aggregation_regress/models.py | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index da34694fede02..775dfae772718 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -329,7 +329,7 @@ def get_count(self): Performs a COUNT() query using the current filter constraints. """ obj = self.clone() - if len(self.select) > 1: + if len(self.select) > 1 or self.aggregate_select: # If a select clause exists, then the query has already started to # specify the columns that are to be returned. # In this case, we need to use a subquery to evaluate the count. @@ -1950,6 +1950,7 @@ def add_count_column(self): # Clear out the select cache to reflect the new unmasked aggregates. self.aggregates = {None: count} self.set_aggregate_mask(None) + self.group_by = None def add_select_related(self, fields): """ diff --git a/tests/regressiontests/aggregation_regress/models.py b/tests/regressiontests/aggregation_regress/models.py index f2763d5c040ed..275ea07390128 100644 --- a/tests/regressiontests/aggregation_regress/models.py +++ b/tests/regressiontests/aggregation_regress/models.py @@ -252,6 +252,13 @@ class Clues(models.Model): >>> [int(x['sheets']) for x in qs] [150, 175, 224, 264, 473, 566] +# Regression for 10425 - annotations don't get in the way of a count() clause +>>> Book.objects.values('publisher').annotate(Count('publisher')).count() +4 + +>>> Book.objects.annotate(Count('publisher')).values('publisher').count() +6 + """ }