Allow for types to never be auto-prepended to indices
This commit is contained in:
		| @@ -410,8 +410,10 @@ class QuerySet(object): | |||||||
|             if use_types and not all(f._index_with_types for f in fields): |             if use_types and not all(f._index_with_types for f in fields): | ||||||
|                 use_types = False |                 use_types = False | ||||||
|  |  | ||||||
|         # If _types is being used, prepend it to every specified index |         # If _types is being used, create an index for it | ||||||
|         if doc_cls._meta.get('allow_inheritance') and use_types: |         index_types = doc_cls._meta.get('index_types', True) | ||||||
|  |         allow_inheritance = doc_cls._meta.get('allow_inheritance') | ||||||
|  |         if index_types and allow_inheritance and use_types: | ||||||
|             index_list.insert(0, ('_types', 1)) |             index_list.insert(0, ('_types', 1)) | ||||||
|  |  | ||||||
|         return index_list |         return index_list | ||||||
| @@ -457,6 +459,7 @@ class QuerySet(object): | |||||||
|             background = self._document._meta.get('index_background', False) |             background = self._document._meta.get('index_background', False) | ||||||
|             drop_dups = self._document._meta.get('index_drop_dups', False) |             drop_dups = self._document._meta.get('index_drop_dups', False) | ||||||
|             index_opts = self._document._meta.get('index_options', {}) |             index_opts = self._document._meta.get('index_options', {}) | ||||||
|  |             index_types = self._document._meta.get('index_types', True) | ||||||
|  |  | ||||||
|             # Ensure indexes created by uniqueness constraints |             # Ensure indexes created by uniqueness constraints | ||||||
|             for index in self._document._meta['unique_indexes']: |             for index in self._document._meta['unique_indexes']: | ||||||
| @@ -470,7 +473,7 @@ class QuerySet(object): | |||||||
|                         background=background, **index_opts) |                         background=background, **index_opts) | ||||||
|  |  | ||||||
|             # If _types is being used (for polymorphism), it needs an index |             # If _types is being used (for polymorphism), it needs an index | ||||||
|             if '_types' in self._query: |             if index_types and '_types' in self._query: | ||||||
|                 self._collection.ensure_index('_types', |                 self._collection.ensure_index('_types', | ||||||
|                     background=background, **index_opts) |                     background=background, **index_opts) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1710,6 +1710,22 @@ class QuerySetTest(unittest.TestCase): | |||||||
|         self.assertTrue([('_types', 1)] in info) |         self.assertTrue([('_types', 1)] in info) | ||||||
|         self.assertTrue([('_types', 1), ('date', -1)] in info) |         self.assertTrue([('_types', 1), ('date', -1)] in info) | ||||||
|  |  | ||||||
|  |     def test_dont_index_types(self): | ||||||
|  |         """Ensure that index_types will, when disabled, prevent _types | ||||||
|  |         being added to all indices. | ||||||
|  |         """ | ||||||
|  |         class BlogPost(Document): | ||||||
|  |             date = DateTimeField() | ||||||
|  |             meta = {'index_types': False, | ||||||
|  |                     'indexes': ['-date']} | ||||||
|  |  | ||||||
|  |         # Indexes are lazy so use list() to perform query | ||||||
|  |         list(BlogPost.objects) | ||||||
|  |         info = BlogPost.objects._collection.index_information() | ||||||
|  |         info = [value['key'] for key, value in info.iteritems()] | ||||||
|  |         self.assertTrue([('_types', 1)] not in info) | ||||||
|  |         self.assertTrue([('date', -1)] in info) | ||||||
|  |  | ||||||
|         BlogPost.drop_collection() |         BlogPost.drop_collection() | ||||||
|  |  | ||||||
|         class BlogPost(Document): |         class BlogPost(Document): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user