From 46da918dbe55468db2a7c292ec05479821db7ed1 Mon Sep 17 00:00:00 2001 From: DavidBord Date: Sun, 17 Aug 2014 11:19:18 +0300 Subject: [PATCH] fix-#733: index_cls is ignored when deciding to set _cls as index prefix --- mongoengine/base/document.py | 3 +++ tests/document/indexes.py | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/mongoengine/base/document.py b/mongoengine/base/document.py index d082f5c0..cfc5de2a 100644 --- a/mongoengine/base/document.py +++ b/mongoengine/base/document.py @@ -718,6 +718,9 @@ class BaseDocument(object): ALLOW_INHERITANCE) include_cls = (allow_inheritance and not spec.get('sparse', False) and spec.get('cls', True)) + + # 733: don't include cls if index_cls is False unless there is an explicit cls with the index + include_cls = include_cls and (spec.get('cls', False) or cls._meta.get('index_cls', True)) if "cls" in spec: spec.pop('cls') for key in spec['fields']: diff --git a/tests/document/indexes.py b/tests/document/indexes.py index 57ee5990..4103c7ae 100644 --- a/tests/document/indexes.py +++ b/tests/document/indexes.py @@ -175,6 +175,16 @@ class IndexesTest(unittest.TestCase): info = A._get_collection().index_information() self.assertEqual(len(info.keys()), 2) + class B(A): + c = StringField() + d = StringField() + meta = { + 'indexes': [{'fields': ['c']}, {'fields': ['d'], 'cls': True}], + 'allow_inheritance': True + } + self.assertEqual([('c', 1)], B._meta['index_specs'][1]['fields']) + self.assertEqual([('_cls', 1), ('d', 1)], B._meta['index_specs'][2]['fields']) + def test_build_index_spec_is_not_destructive(self): class MyDoc(Document):