added content of PR #688 with a test to proove it is a bit right

This commit is contained in:
mrigal
2015-04-16 14:37:46 +02:00
committed by Matthieu Rigal
parent 1862bcf867
commit 53fbc165ba
2 changed files with 27 additions and 4 deletions

View File

@@ -390,10 +390,16 @@ class TopLevelDocumentMetaclass(DocumentMetaclass):
new_class._fields['id'] = ObjectIdField(db_field='_id')
new_class._fields['id'].name = 'id'
new_class.id = new_class._fields['id']
# Prepend id field to _fields_ordered
if 'id' in new_class._fields and 'id' not in new_class._fields_ordered:
new_class._fields_ordered = ('id', ) + new_class._fields_ordered
new_class._db_field_map['id'] = '_id'
new_class._reverse_db_field_map['_id'] = 'id'
if 'id' in new_class._fields_ordered:
# An existing id field will be overwritten anyway, so remove it
loc = new_class._fields_ordered.index('id')
new_class._fields_ordered = new_class._fields_ordered[:loc] + \
new_class._fields_ordered[loc+1:]
else:
# Prepend id field to _fields_ordered
new_class._fields_ordered = ('id', ) + new_class._fields_ordered
# Merge in exceptions with parent hierarchy
exceptions_to_merge = (DoesNotExist, MultipleObjectsReturned)