Store ordered list of field names, and return the ordered list when iterating a document instance.
This commit is contained in:
parent
9f58bc9207
commit
32d5c0c946
@ -560,8 +560,11 @@ class DocumentMetaclass(type):
|
|||||||
|
|
||||||
# Set _fields and db_field maps
|
# Set _fields and db_field maps
|
||||||
attrs['_fields'] = doc_fields
|
attrs['_fields'] = doc_fields
|
||||||
attrs['_db_field_map'] = dict([(k, getattr(v, 'db_field', k))
|
attrs['_fields_ordered'] = tuple(i[1]
|
||||||
for k, v in doc_fields.iteritems()])
|
for i in sorted((v.creation_counter, v.name)
|
||||||
|
for v in doc_fields.itervalues()))
|
||||||
|
attrs['_db_field_map'] = dict((k, getattr(v, 'db_field', k))
|
||||||
|
for k, v in doc_fields.iteritems())
|
||||||
attrs['_reverse_db_field_map'] = dict(
|
attrs['_reverse_db_field_map'] = dict(
|
||||||
(v, k) for k, v in attrs['_db_field_map'].iteritems())
|
(v, k) for k, v in attrs['_db_field_map'].iteritems())
|
||||||
|
|
||||||
@ -1302,7 +1305,10 @@ class BaseDocument(object):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return iter(self._fields)
|
if 'id' in self._fields and 'id' not in self._fields_ordered:
|
||||||
|
return iter(('id', ) + self._fields_ordered)
|
||||||
|
|
||||||
|
return iter(self._fields_ordered)
|
||||||
|
|
||||||
def __getitem__(self, name):
|
def __getitem__(self, name):
|
||||||
"""Dictionary-style field access, return a field's value if present.
|
"""Dictionary-style field access, return a field's value if present.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user