diff --git a/docs/changelog.rst b/docs/changelog.rst index 02fb8246..6a4dab60 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,7 @@ Changelog Changes in 0.8.2 ================ +- Fixed Doc.objects(read_preference=X) not setting read preference (#352) - Django session ttl index expiry fixed (#329) - Fixed pickle.loads (#342) - Documentation fixes diff --git a/mongoengine/queryset/queryset.py b/mongoengine/queryset/queryset.py index 4222459f..00a0abcb 100644 --- a/mongoengine/queryset/queryset.py +++ b/mongoengine/queryset/queryset.py @@ -104,13 +104,17 @@ class QuerySet(object): raise InvalidQueryError(msg) query &= q_obj - queryset = self.clone() + if read_preference is None: + queryset = self.clone() + else: + # Use the clone provided when setting read_preference + queryset = self.read_preference(read_preference) + queryset._query_obj &= query queryset._mongo_query = None queryset._cursor_obj = None - if read_preference is not None: - queryset.read_preference(read_preference) queryset._class_check = class_check + return queryset def __len__(self): diff --git a/tests/queryset/queryset.py b/tests/queryset/queryset.py index 54257410..507408d7 100644 --- a/tests/queryset/queryset.py +++ b/tests/queryset/queryset.py @@ -3098,7 +3098,10 @@ class QuerySetTest(unittest.TestCase): self.assertEqual([], bars) self.assertRaises(ConfigurationError, Bar.objects, - read_preference='Primary') + read_preference='Primary') + + bars = Bar.objects(read_preference=ReadPreference.SECONDARY_PREFERRED) + self.assertEqual(bars._read_preference, ReadPreference.SECONDARY_PREFERRED) def test_json_simple(self):