diff options
| author | Y3K <dboy.y3k@gmail.com> | 2015-08-30 23:18:03 -0500 |
|---|---|---|
| committer | Josh Smeaton <josh.smeaton@gmail.com> | 2015-08-31 15:13:59 +1000 |
| commit | cbcf78fa949091e037861d66d942d7fb31d57bf6 (patch) | |
| tree | a2c9d1a7563511fbfbab9111f1d2ddb22ea2b81e | |
| parent | 7a98442f9645102601c5a18b2ff93b7433e3a01d (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.py | 4 | ||||
| -rw-r--r-- | tests/select_related/tests.py | 20 |
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): """ |
