parent
e7bcb5e366
commit
3e2f035400
@ -5,6 +5,7 @@ Changelog
|
||||
Changes in dev
|
||||
==============
|
||||
|
||||
- Fixed Abstract documents can now declare indexes
|
||||
- Added db_alias support to individual documents
|
||||
- Fixed GridFS documents can now be pickled
|
||||
- Added Now raises an InvalidDocumentError when declaring multiple fields with the same db_field
|
||||
|
@ -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)
|
||||
|
@ -664,6 +664,35 @@ class DocumentTest(unittest.TestCase):
|
||||
|
||||
BlogPost.drop_collection()
|
||||
|
||||
def test_abstract_index_inheritance(self):
|
||||
|
||||
class UserBase(Document):
|
||||
meta = {
|
||||
'abstract': True,
|
||||
'indexes': ['user_guid']
|
||||
}
|
||||
|
||||
user_guid = StringField(required=True)
|
||||
|
||||
|
||||
class Person(UserBase):
|
||||
meta = {
|
||||
'indexes': ['name'],
|
||||
}
|
||||
|
||||
name = StringField()
|
||||
|
||||
Person.drop_collection()
|
||||
|
||||
p = Person(name="test", user_guid='123')
|
||||
p.save()
|
||||
|
||||
self.assertEquals(1, Person.objects.count())
|
||||
info = Person.objects._collection.index_information()
|
||||
self.assertEqual(info.keys(), ['_types_1_user_guid_1', '_id_', '_types_1_name_1'])
|
||||
Person.drop_collection()
|
||||
|
||||
|
||||
def test_embedded_document_index(self):
|
||||
"""Tests settings an index on an embedded document
|
||||
"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user