summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/query.py12
-rw-r--r--tests/regressiontests/queries/tests.py7
2 files changed, 19 insertions, 0 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 0210a7914d..412cad026f 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1271,6 +1271,18 @@ class EmptyQuerySet(QuerySet):
kwargs[arg.default_alias] = arg
return dict([(key, None) for key in kwargs])
+ def values(self, *fields):
+ """
+ Always returns EmptyQuerySet.
+ """
+ return self
+
+ def values_list(self, *fields, **kwargs):
+ """
+ Always returns EmptyQuerySet.
+ """
+ return self
+
# EmptyQuerySet is always an empty result in where-clauses (and similar
# situations).
value_annotation = False
diff --git a/tests/regressiontests/queries/tests.py b/tests/regressiontests/queries/tests.py
index 71ac107486..c2a4ad1caf 100644
--- a/tests/regressiontests/queries/tests.py
+++ b/tests/regressiontests/queries/tests.py
@@ -1698,6 +1698,13 @@ class EmptyQuerySetTests(TestCase):
[]
)
+ def test_ticket_19151(self):
+ # #19151 -- Calling .values() or .values_list() on an EmptyQuerySet
+ # should return EmptyQuerySet and not cause an error.
+ q = EmptyQuerySet()
+ self.assertQuerysetEqual(q.values(), [])
+ self.assertQuerysetEqual(q.values_list(), [])
+
class ValuesQuerysetTests(BaseQuerysetTest):
def test_flat_values_lits(self):