Abstract documents can now declare indexes

fixes #380
This commit is contained in:
Ross Lawley
2011-12-07 02:15:50 -08:00
parent e7bcb5e366
commit 3e2f035400
3 changed files with 37 additions and 2 deletions

View File

@@ -586,6 +586,7 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
collection = ''.join('_%s' % c if c.isupper() else c for c in name).strip('_').lower()
id_field = None
abstract_base_indexes = []
base_indexes = []
base_meta = {}
@@ -605,7 +606,10 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
base_meta[key] = base._meta[key]
id_field = id_field or base._meta.get('id_field')
base_indexes += base._meta.get('indexes', [])
if base._meta.get('abstract', False):
abstract_base_indexes += base._meta.get('indexes', [])
else:
base_indexes += base._meta.get('indexes', [])
# Propagate 'allow_inheritance'
if 'allow_inheritance' in base._meta:
base_meta['allow_inheritance'] = base._meta['allow_inheritance']
@@ -651,8 +655,9 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
meta['queryset_class'] = manager.queryset_class
new_class.objects = manager
indicies = meta['indexes'] + abstract_base_indexes
user_indexes = [QuerySet._build_index_spec(new_class, spec)
for spec in meta['indexes']] + base_indexes
for spec in indicies] + base_indexes
new_class._meta['indexes'] = user_indexes
unique_indexes = cls._unique_with_indexes(new_class)