mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #9985 -- qs.values_list(...).values(...) was constructing incorrect SQL.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@9717 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -680,6 +680,7 @@ class ValuesQuerySet(QuerySet): | ||||
|         Called by the _clone() method after initializing the rest of the | ||||
|         instance. | ||||
|         """ | ||||
|         self.query.clear_select_fields() | ||||
|         self.extra_names = [] | ||||
|         if self._fields: | ||||
|             if not self.query.extra_select: | ||||
| @@ -704,6 +705,9 @@ class ValuesQuerySet(QuerySet): | ||||
|         Cloning a ValuesQuerySet preserves the current fields. | ||||
|         """ | ||||
|         c = super(ValuesQuerySet, self)._clone(klass, **kwargs) | ||||
|         if not hasattr(c, '_fields'): | ||||
|             # Only clone self._fields if _fields wasn't passed into the cloning | ||||
|             # call directly. | ||||
|             c._fields = self._fields[:] | ||||
|         c.field_names = self.field_names | ||||
|         c.extra_names = self.extra_names | ||||
|   | ||||
| @@ -1538,6 +1538,15 @@ class BaseQuery(object): | ||||
|         """ | ||||
|         return not (self.low_mark or self.high_mark) | ||||
|  | ||||
|     def clear_select_fields(self): | ||||
|         """ | ||||
|         Clears the list of fields to select (but not extra_select columns). | ||||
|         Some queryset types completely replace any existing list of select | ||||
|         columns. | ||||
|         """ | ||||
|         self.select = [] | ||||
|         self.select_fields = [] | ||||
|  | ||||
|     def add_fields(self, field_names, allow_m2m=True): | ||||
|         """ | ||||
|         Adds the given (model) fields to the select set. The field names are | ||||
|   | ||||
| @@ -1022,6 +1022,12 @@ nothing). | ||||
| >>> print Annotation.objects.filter(notes__in=Note.objects.filter(note="xyzzy")).query | ||||
| SELECT ... | ||||
|  | ||||
| Bug #9985 -- qs.values_list(...).values(...) combinations should work. | ||||
| >>> Note.objects.values_list("note", flat=True).values("id").order_by("id") | ||||
| [{'id': 1}, {'id': 2}, {'id': 3}] | ||||
| >>> Annotation.objects.filter(notes__in=Note.objects.filter(note="n1").values_list('note').values('id')) | ||||
| [<Annotation: a1>] | ||||
|  | ||||
| """} | ||||
|  | ||||
| # In Python 2.3 and the Python 2.6 beta releases, exceptions raised in __len__ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user