[1.2.X] Fixed #14366 -- Model.objects.none().values() now correctly returns a QuerySet with no items, rather than raising an Exception. Thanks to Carl Meyer for the patch. Backport of [14084].

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14085 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2010-10-09 16:46:25 +00:00
parent 2e5f0c228f
commit bb66cb8463
2 changed files with 8 additions and 2 deletions

View File

@ -1021,7 +1021,7 @@ class EmptyQuerySet(QuerySet):
pass pass
def _clone(self, klass=None, setup=False, **kwargs): def _clone(self, klass=None, setup=False, **kwargs):
c = super(EmptyQuerySet, self)._clone(klass, **kwargs) c = super(EmptyQuerySet, self)._clone(klass, setup=setup, **kwargs)
c._result_cache = [] c._result_cache = []
return c return c

View File

@ -4,7 +4,7 @@ from django.db import DatabaseError, connections, DEFAULT_DB_ALIAS
from django.db.models import Count from django.db.models import Count
from django.test import TestCase from django.test import TestCase
from models import Tag, Annotation, DumbCategory, Note, ExtraInfo from models import Tag, Annotation, DumbCategory, Note, ExtraInfo, Number
class QuerysetOrderedTests(unittest.TestCase): class QuerysetOrderedTests(unittest.TestCase):
""" """
@ -81,3 +81,9 @@ class CloneTests(TestCase):
self.assertEquals(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good') self.assertEquals(ExtraInfo.objects.filter(note__in=n_list)[0].info, 'good')
except: except:
self.fail('Query should be clonable') self.fail('Query should be clonable')
class EmptyQuerySetTests(TestCase):
def test_emptyqueryset_values(self):
"#14366 -- calling .values() on an EmptyQuerySet and then cloning that should not cause an error"
self.assertEqual(list(Number.objects.none().values('num').order_by('num')), [])