              kwargs[arg.default_alias] = arg
  
          obj = self._clone()
  
          obj._setup_aggregate_query()
  
          # Add the aggregates to the query
          for (alias, aggregate_expr) in kwargs.items():
              obj.query.add_aggregate(aggregate_expr, self.model, alias,
                  is_summary=False)
 
</s> remove         self.aggregate_select = SortedDict() # Maps alias -> SQL aggregate function
 </s> add         self.aggregates = SortedDict() # Maps alias -> SQL aggregate function
        self.aggregate_select_mask = None
        self._aggregate_select_cache = None </s> remove         for pos, col in enumerate(self.select):
            if isinstance(col, (list, tuple)):
                old_alias = col[0]
                self.select[pos] = (change_map.get(old_alias, old_alias), col[1])
            else:
                col.relabel_aliases(change_map)
 </s> add         self.having.relabel_aliases(change_map)
        for columns in (self.select, self.aggregates.values(), self.group_by or []):
            for pos, col in enumerate(columns):
                if isinstance(col, (list, tuple)):
                    old_alias = col[0]
                    columns[pos] = (change_map.get(old_alias, old_alias), col[1])
                else:
                    col.relabel_aliases(change_map) </s> remove         query.aggregate_select[alias] = aggregate
 </s> add         query.aggregates[alias] = aggregate </s> remove     def _setup_aggregate_query(self):
 </s> add     def _setup_aggregate_query(self, aggregates): </s> remove         # 1. Update references in "select" and "where".
 </s> add         # 1. Update references in "select" (normal columns plus aliases),
        # "group by", "where" and "having".
        obj._setup_aggregate_query(kwargs.keys())
              kwargs[arg.default_alias] = arg
  
          obj = self._clone()
  
        obj._setup_aggregate_query(kwargs.keys())
  
          # Add the aggregates to the query
          for (alias, aggregate_expr) in kwargs.items():
              obj.query.add_aggregate(aggregate_expr, self.model, alias,
                  is_summary=False)
keep keep keep keep replace keep keep keep keep keep
 Fixed #10182 -- Corrected realiasing and the process of evaluating values() for queries with aggregate clauses. This means that aggregate queries can now be used as subqueries (such as in an __in clause). Thanks to omat for the report.

This involves a slight change to the interaction of annotate() and values() clauses that specify a list of columns. See the docs for details.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9888 bcc190cf-cafb-0310-a4f2-bffc1f526a37 
django/db/models/query.py