Skip to content

Commit 46da918

Browse files
committed
fix-MongoEngine#733: index_cls is ignored when deciding to set _cls as index prefix
1 parent bb7e5f1 commit 46da918

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

mongoengine/base/document.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,9 @@ def _build_index_spec(cls, spec):
718718
ALLOW_INHERITANCE)
719719
include_cls = (allow_inheritance and not spec.get('sparse', False) and
720720
spec.get('cls', True))
721+
722+
# 733: don't include cls if index_cls is False unless there is an explicit cls with the index
723+
include_cls = include_cls and (spec.get('cls', False) or cls._meta.get('index_cls', True))
721724
if "cls" in spec:
722725
spec.pop('cls')
723726
for key in spec['fields']:

tests/document/indexes.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,16 @@ class A(Document):
175175
info = A._get_collection().index_information()
176176
self.assertEqual(len(info.keys()), 2)
177177

178+
class B(A):
179+
c = StringField()
180+
d = StringField()
181+
meta = {
182+
'indexes': [{'fields': ['c']}, {'fields': ['d'], 'cls': True}],
183+
'allow_inheritance': True
184+
}
185+
self.assertEqual([('c', 1)], B._meta['index_specs'][1]['fields'])
186+
self.assertEqual([('_cls', 1), ('d', 1)], B._meta['index_specs'][2]['fields'])
187+
178188
def test_build_index_spec_is_not_destructive(self):
179189

180190
class MyDoc(Document):

0 commit comments

Comments
 (0)