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:
		| @@ -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): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user