位于 _pre_delete_hook 或 _post_delete_hook

Nestled _pre_delete_hook or _post_delete_hook

我用 ndb-models 制作了一个 Google App Engine 应用程序。它有点像树结构。 我想在删除根时删除所有模型,而不仅仅是分支的第一个杠杆。

示例:

Company
  Order
    Item
      ...
  Contact
    Pet

当我删除一个模型时,我希望所有依赖它的模型也被删除。 我以为我可以用 _pre_delete_hook 或 _post_delete_hook 来完成。 在删除订单的示例中,我使用挂钩删除了所有项目。 如果我删除整个公司,我会删除所有订单和联系人。这些模型的删除挂钩不会触发。数据保留。

使用 _pre_delete_hook_post_delete_hook 有什么好处?似乎使您的代码可读性降低,并且有点容易受到 Google 代码更新的影响。我总是很紧张使用以下划线开头的方法。

相反,只需为实体创建您自己的删除方法:

class Company(ndb.Model):
    def delete(self):
        for order in Order.query(Order.company_key == self.key)):
            order.delete()
        self.key.delete()

class Order(ndb.Model):
    def delete(self):
        for item in Item.query(Item.order_key == self.key)):
            item.delete()
        self.key.delete()