如果我有以下两种型号:
class User(Document):
...
class Profile(Document):
user = ReferenceField(reverse_delete_rule=CASCADE)
删除用户实例是否会删除其个人资料?删除其个人资料会删除用户吗?
中有接缝错误class Employee(Document): ... profile_page = ReferenceField('ProfilePage', reverse_delete_rule=mongoengine.NULLIFY)
此声明 示例意味着当删除Employee对象时,ProfilePage 属于该员工的也被删除。如果整批 员工被删除,链接的所有个人资料页面都将被删除 好。
代码使用NULLIFY
,但解释说明CASCADE
的使用。或者我误解了什么?
答案 0 :(得分:2)
删除用户实例会删除其个人资料。这是reverse_delete_rule=CASCADE
的工作方式。就像在关系数据库中一样。
您可以查看此代码:
from mongoengine import connect, Document, ReferenceField, CASCADE
connect('test_cascade')
class User(Document):
pass
class Profile(Document):
user = ReferenceField(User, reverse_delete_rule=CASCADE)
user = User().save()
profile = Profile(user=user).save()
user.delete()
assert Profile.objects.count() == 0
他们还更新了文档,现在还有其他方法:
class ProfilePage(Document): ... employee = ReferenceField('Employee', reverse_delete_rule=mongoengine.CASCADE)
此示例中的声明表示当删除 Employee对象时,也会删除引用该员工的 ProfilePage 。如果删除了整批员工,则也会删除链接的所有个人资料页面。