parent
e7bcb5e366
commit
3e2f035400
@ -5,6 +5,7 @@ Changelog
|
|||||||
Changes in dev
|
Changes in dev
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
- Fixed Abstract documents can now declare indexes
|
||||||
- Added db_alias support to individual documents
|
- Added db_alias support to individual documents
|
||||||
- Fixed GridFS documents can now be pickled
|
- Fixed GridFS documents can now be pickled
|
||||||
- Added Now raises an InvalidDocumentError when declaring multiple fields with the same db_field
|
- 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()
|
collection = ''.join('_%s' % c if c.isupper() else c for c in name).strip('_').lower()
|
||||||
|
|
||||||
id_field = None
|
id_field = None
|
||||||
|
abstract_base_indexes = []
|
||||||
base_indexes = []
|
base_indexes = []
|
||||||
base_meta = {}
|
base_meta = {}
|
||||||
|
|
||||||
@ -605,7 +606,10 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
|
|||||||
base_meta[key] = base._meta[key]
|
base_meta[key] = base._meta[key]
|
||||||
|
|
||||||
id_field = id_field or base._meta.get('id_field')
|
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'
|
# Propagate 'allow_inheritance'
|
||||||
if 'allow_inheritance' in base._meta:
|
if 'allow_inheritance' in base._meta:
|
||||||
base_meta['allow_inheritance'] = base._meta['allow_inheritance']
|
base_meta['allow_inheritance'] = base._meta['allow_inheritance']
|
||||||
@ -651,8 +655,9 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
|
|||||||
meta['queryset_class'] = manager.queryset_class
|
meta['queryset_class'] = manager.queryset_class
|
||||||
new_class.objects = manager
|
new_class.objects = manager
|
||||||
|
|
||||||
|
indicies = meta['indexes'] + abstract_base_indexes
|
||||||
user_indexes = [QuerySet._build_index_spec(new_class, spec)
|
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
|
new_class._meta['indexes'] = user_indexes
|
||||||
|
|
||||||
unique_indexes = cls._unique_with_indexes(new_class)
|
unique_indexes = cls._unique_with_indexes(new_class)
|
||||||
|
@ -664,6 +664,35 @@ class DocumentTest(unittest.TestCase):
|
|||||||
|
|
||||||
BlogPost.drop_collection()
|
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):
|
def test_embedded_document_index(self):
|
||||||
"""Tests settings an index on an embedded document
|
"""Tests settings an index on an embedded document
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user