Store ordered list of field names, and return the ordered list when iterating a document instance.
This commit is contained in:
		| @@ -560,8 +560,11 @@ class DocumentMetaclass(type): | ||||
|  | ||||
|         # Set _fields and db_field maps | ||||
|         attrs['_fields'] = doc_fields | ||||
|         attrs['_db_field_map'] = dict([(k, getattr(v, 'db_field', k)) | ||||
|                                         for k, v in doc_fields.iteritems()]) | ||||
|         attrs['_fields_ordered'] = tuple(i[1] | ||||
|                                          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( | ||||
|                 (v, k) for k, v in attrs['_db_field_map'].iteritems()) | ||||
|  | ||||
| @@ -1302,7 +1305,10 @@ class BaseDocument(object): | ||||
|         return value | ||||
|  | ||||
|     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): | ||||
|         """Dictionary-style field access, return a field's value if present. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user