summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorY3K <dboy.y3k@gmail.com>2015-08-30 23:18:03 -0500
committerJosh Smeaton <josh.smeaton@gmail.com>2015-08-31 15:13:59 +1000
commitcbcf78fa949091e037861d66d942d7fb31d57bf6 (patch)
treea2c9d1a7563511fbfbab9111f1d2ddb22ea2b81e
parent7a98442f9645102601c5a18b2ff93b7433e3a01d (diff)
Fixed #25252 -- Added friendly error message on incorrect .select_related() use
Using select_related() after .values() or .values_list() is not possible because .values() or .values_list() already got the values they need.
-rw-r--r--django/db/models/query.py4
-rw-r--r--tests/select_related/tests.py20
2 files changed, 24 insertions, 0 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py
index c147928759..4480add93c 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -843,6 +843,10 @@ class QuerySet(object):
If select_related(None) is called, the list is cleared.
"""
+
+ if self._fields is not None:
+ raise TypeError("Cannot call select_related() after .values() or .values_list()")
+
obj = self._clone()
if fields == (None,):
obj.query.select_related = False
diff --git a/tests/select_related/tests.py b/tests/select_related/tests.py
index 9a027ac18c..53353a7715 100644
--- a/tests/select_related/tests.py
+++ b/tests/select_related/tests.py
@@ -163,6 +163,26 @@ class SelectRelatedTests(TestCase):
self.assertEqual(obj.parent_1, parent_1)
self.assertEqual(obj.parent_2, parent_2)
+ def test_select_related_after_values(self):
+ """
+ Running select_related() after calling values() raises a TypeError
+ """
+
+ message = "Cannot call select_related() after .values() or .values_list()"
+
+ with self.assertRaisesMessage(TypeError, message):
+ list(Species.objects.values('name').select_related('genus'))
+
+ def test_select_related_after_values_list(self):
+ """
+ Running select_related() after calling values_list() raises a TypeError
+ """
+
+ message = "Cannot call select_related() after .values() or .values_list()"
+
+ with self.assertRaisesMessage(TypeError, message):
+ list(Species.objects.values_list('name').select_related('genus'))
+
class SelectRelatedValidationTests(SimpleTestCase):
"""