diff --git a/docs/guide/defining-documents.rst b/docs/guide/defining-documents.rst index a2c598c6..2b64ca36 100644 --- a/docs/guide/defining-documents.rst +++ b/docs/guide/defining-documents.rst @@ -200,8 +200,8 @@ documents that other documents still hold references to will lead to consistency issues. Mongoengine's :class:`ReferenceField` adds some functionality to safeguard against these kinds of database integrity problems, providing each reference with a delete rule specification. A delete rule is specified by -supplying the :attr:`delete_rule` attribute on the :class:`ReferenceField` -definition, like this:: +supplying the :attr:`reverse_delete_rule` attributes on the +:class:`ReferenceField` definition, like this:: class Employee(Document): ... diff --git a/mongoengine/base.py b/mongoengine/base.py index 405f642c..a59cdbac 100644 --- a/mongoengine/base.py +++ b/mongoengine/base.py @@ -191,7 +191,7 @@ class DocumentMetaclass(type): new_class = super_new(cls, name, bases, attrs) for field in new_class._fields.values(): field.owner_document = new_class - delete_rule = getattr(field, 'delete_rule', DO_NOTHING) + delete_rule = getattr(field, 'reverse_delete_rule', DO_NOTHING) if delete_rule != DO_NOTHING: field.document_type.register_delete_rule(new_class, field.name, delete_rule) diff --git a/mongoengine/fields.py b/mongoengine/fields.py index 235694a6..5fdde1ee 100644 --- a/mongoengine/fields.py +++ b/mongoengine/fields.py @@ -418,13 +418,13 @@ class ReferenceField(BaseField): access (lazily). """ - def __init__(self, document_type, delete_rule=DO_NOTHING, **kwargs): + def __init__(self, document_type, reverse_delete_rule=DO_NOTHING, **kwargs): if not isinstance(document_type, basestring): if not issubclass(document_type, (Document, basestring)): raise ValidationError('Argument to ReferenceField constructor ' 'must be a document class or a string') self.document_type_obj = document_type - self.delete_rule = delete_rule + self.reverse_delete_rule = reverse_delete_rule super(ReferenceField, self).__init__(**kwargs) @property diff --git a/tests/document.py b/tests/document.py index e768b54f..67c21a46 100644 --- a/tests/document.py +++ b/tests/document.py @@ -625,14 +625,14 @@ class DocumentTest(unittest.TestCase): BlogPost.drop_collection() - def test_delete_rule_cascade_and_nullify(self): + def test_reverse_delete_rule_cascade_and_nullify(self): """Ensure that a referenced document is also deleted upon deletion. """ class BlogPost(Document): content = StringField() - author = ReferenceField(self.Person, delete_rule=CASCADE) - reviewer = ReferenceField(self.Person, delete_rule=NULLIFY) + author = ReferenceField(self.Person, reverse_delete_rule=CASCADE) + reviewer = ReferenceField(self.Person, reverse_delete_rule=NULLIFY) self.Person.drop_collection() BlogPost.drop_collection() @@ -656,18 +656,18 @@ class DocumentTest(unittest.TestCase): author.delete() self.assertEqual(len(BlogPost.objects), 0) - def test_delete_rule_cascade_recurs(self): + def test_reverse_delete_rule_cascade_recurs(self): """Ensure that a chain of documents is also deleted upon cascaded deletion. """ class BlogPost(Document): content = StringField() - author = ReferenceField(self.Person, delete_rule=CASCADE) + author = ReferenceField(self.Person, reverse_delete_rule=CASCADE) class Comment(Document): text = StringField() - post = ReferenceField(BlogPost, delete_rule=CASCADE) + post = ReferenceField(BlogPost, reverse_delete_rule=CASCADE) author = self.Person(name='Test User') @@ -690,14 +690,14 @@ class DocumentTest(unittest.TestCase): BlogPost.drop_collection() Comment.drop_collection() - def test_delete_rule_deny(self): + def test_reverse_delete_rule_deny(self): """Ensure that a document cannot be referenced if there are still documents referring to it. """ class BlogPost(Document): content = StringField() - author = ReferenceField(self.Person, delete_rule=DENY) + author = ReferenceField(self.Person, reverse_delete_rule=DENY) self.Person.drop_collection() BlogPost.drop_collection() diff --git a/tests/queryset.py b/tests/queryset.py index d6ec46bb..f95974e2 100644 --- a/tests/queryset.py +++ b/tests/queryset.py @@ -734,12 +734,12 @@ class QuerySetTest(unittest.TestCase): self.Person.objects.delete() self.assertEqual(len(self.Person.objects), 0) - def test_delete_rule_cascade(self): + def test_reverse_delete_rule_cascade(self): """Ensure cascading deletion of referring documents from the database. """ class BlogPost(Document): content = StringField() - author = ReferenceField(self.Person, delete_rule=CASCADE) + author = ReferenceField(self.Person, reverse_delete_rule=CASCADE) BlogPost.drop_collection() me = self.Person(name='Test User') @@ -755,7 +755,7 @@ class QuerySetTest(unittest.TestCase): self.Person.objects(name='Test User').delete() self.assertEqual(1, BlogPost.objects.count()) - def test_delete_rule_nullify(self): + def test_reverse_delete_rule_nullify(self): """Ensure nullification of references to deleted documents. """ class Category(Document): @@ -763,7 +763,7 @@ class QuerySetTest(unittest.TestCase): class BlogPost(Document): content = StringField() - category = ReferenceField(Category, delete_rule=NULLIFY) + category = ReferenceField(Category, reverse_delete_rule=NULLIFY) BlogPost.drop_collection() Category.drop_collection() @@ -780,13 +780,13 @@ class QuerySetTest(unittest.TestCase): self.assertEqual(1, BlogPost.objects.count()) self.assertEqual(None, BlogPost.objects.first().category) - def test_delete_rule_deny(self): + def test_reverse_delete_rule_deny(self): """Ensure deletion gets denied on documents that still have references to them. """ class BlogPost(Document): content = StringField() - author = ReferenceField(self.Person, delete_rule=DENY) + author = ReferenceField(self.Person, reverse_delete_rule=DENY) BlogPost.drop_collection() self.Person.drop_collection()