>>> class A(db.Document): ... meta = {'allow_inheritance': True} ... >>> class B(db.Document): ... cross_ref = db.ReferenceField(A, reverse_delete_rule=db.NULLIFY) ... >>> class C(A): ... cross_ref = db.ReferenceField(B, reverse_delete_rule=db.NULLIFY) ... >>> b = B() >>> b.save() >>> c = C() >>> c.save() >>> b.cross_ref = c >>> c.cross_ref = b >>> b.save() >>> c.save() >>> b.id ObjectId('56b24a45efdbe273c79e44d6') >>> c.id ObjectId('56b24a50efdbe273c79e44d7') >>> [(_.id, _.cross_ref.id) for _ in B.objects] [(ObjectId('56b24a45efdbe273c79e44d6'), ObjectId('56b24a50efdbe273c79e44d7'))] >>> [(_.id, _.cross_ref.id) for _ in C.objects] [(ObjectId('56b24a50efdbe273c79e44d7'), ObjectId('56b24a45efdbe273c79e44d6'))] >>> c.delete() >>> B.objects.count() 1 >>> C.objects.count() 0 >>> [(_.id, _.cross_ref.id) for _ in B.objects] Traceback (most recent call last): File "", line 1, in File "", line 1, in AttributeError: 'NoneType' object has no attribute 'id' >>> [_.id for _ in B.objects] [ObjectId('56b24a45efdbe273c79e44d6')] >>> [_.id for _ in C.objects] [] >>>