Added Reverse Delete Rule support to ListFields
DictFields and MapFields aren't supported and raise an InvalidDocument Error Closes #254
This commit is contained in:
		| @@ -503,15 +503,22 @@ class DocumentMetaclass(type): | ||||
|         attrs['_db_field_map'] = dict([(k, v.db_field) for k, v in doc_fields.items() if k!=v.db_field]) | ||||
|         attrs['_reverse_db_field_map'] = dict([(v, k) for k, v in attrs['_db_field_map'].items()]) | ||||
|  | ||||
|         from mongoengine import Document, EmbeddedDocument | ||||
|         from mongoengine import Document, EmbeddedDocument, DictField | ||||
|  | ||||
|         new_class = super_new(cls, name, bases, attrs) | ||||
|         for field in new_class._fields.values(): | ||||
|             field.owner_document = new_class | ||||
|  | ||||
|             delete_rule = getattr(field, 'reverse_delete_rule', DO_NOTHING) | ||||
|             f = field | ||||
|             if isinstance(f, ComplexBaseField) and hasattr(f, 'field'): | ||||
|                 delete_rule = getattr(f.field, 'reverse_delete_rule', DO_NOTHING) | ||||
|                 if isinstance(f, DictField) and delete_rule != DO_NOTHING: | ||||
|                     raise InvalidDocumentError("Reverse delete rules are not supported for %s (field: %s)" % (field.__class__.__name__, field.name)) | ||||
|                 f = field.field | ||||
|  | ||||
|             if delete_rule != DO_NOTHING: | ||||
|                 field.document_type.register_delete_rule(new_class, field.name, | ||||
|                         delete_rule) | ||||
|                 f.document_type.register_delete_rule(new_class, field.name, delete_rule) | ||||
|  | ||||
|             if field.name and hasattr(Document, field.name) and EmbeddedDocument not in new_class.mro(): | ||||
|                 raise InvalidDocumentError("%s is a document method and not a valid field name" % field.name) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user