嵌套_pre_delete_hook或_post_delete_hook

时间:2017-05-18 16:55:32

标签: google-app-engine app-engine-ndb

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

示例:

Company
  Order
    Item
      ...
  Contact
    Pet

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

1 个答案:

答案 0 :(得分:2)

使用_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()