Merge pull request #738 from DavidBord/fix-733
fix-#733: index_cls is ignored when deciding to set _cls as index prefix
This commit is contained in:
commit
6bae4c6a66
@ -718,6 +718,9 @@ class BaseDocument(object):
|
|||||||
ALLOW_INHERITANCE)
|
ALLOW_INHERITANCE)
|
||||||
include_cls = (allow_inheritance and not spec.get('sparse', False) and
|
include_cls = (allow_inheritance and not spec.get('sparse', False) and
|
||||||
spec.get('cls', True))
|
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:
|
if "cls" in spec:
|
||||||
spec.pop('cls')
|
spec.pop('cls')
|
||||||
for key in spec['fields']:
|
for key in spec['fields']:
|
||||||
|
@ -175,6 +175,16 @@ class IndexesTest(unittest.TestCase):
|
|||||||
info = A._get_collection().index_information()
|
info = A._get_collection().index_information()
|
||||||
self.assertEqual(len(info.keys()), 2)
|
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):
|
def test_build_index_spec_is_not_destructive(self):
|
||||||
|
|
||||||
class MyDoc(Document):
|
class MyDoc(Document):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user