【问题标题】:Access to deleted entity in Appengine NDB [closed]访问 Appengine NDB 中已删除的实体 [关闭]
【发布时间】:2012-03-07 17:21:02
【问题描述】:

我在 Appengine 项目中使用 NDB。在删除某些实体后,我正在使用 _post_delete_hook 进行一些操作。在这种方法中,我有钥匙。但是当我做 key.get() 我得到一个错误。 这是一些示例代码。

[friends/models.py]

from ndb import models
from users.models import User

class FriendShip(models.Model):
    user = models.KeyProperty(kind=User)
    friend = models.KeyProperty(kind=User)

    @classmethod
    def _post_delete_hook(cls, key, future):
        signals.post_delete.send(cls, instance=key)

[some-other-filer.py]

# connected method to post_detele_hook
def ended_friendship(sender, **kwargs):
    key = kwargs.get('instance', None)
    if key:
        user = key.get().user # raise a non existing entity error

一些帮助?

这是关于钩子的文档。 http://code.google.com/appengine/docs/python/ndb/entities.html#hooks

【问题讨论】:

  • 如果被删除了,就再也拿不到了。您为什么希望能够做到?
  • 完全正确。删除后,您将无法再访问它。

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


【解决方案1】:

对于您的用例(希望在您的方法中访问实体),_pre_delete_hook 可能更有意义。见http://code.google.com/appengine/docs/python/ndb/modelclass.html#Model__pre_delete_hook

【讨论】:

  • 感谢您的回复。但是有一个使用 pre_hook 的成功删除操作的授权?就我而言,我想要一个 post_delete_hook 来减少拥有与已删除实体相关的实体的总计数。
  • 您必须找到一种机制将信息从预删除挂钩传递到删除后挂钩。可能某种由 key 索引的全局 dict 可能会起作用(一定要删除 post-delete 挂钩中的 key)。
  • 不能将被删除的实体作为 Django 模型信号之类的钩子中的参数吗?我现在在想,如果我想知道某个实体是第一次保存还是刚刚更新,我应该用 pre_put 和 post_put 钩子制作某种游戏。在 post_put_hook 中有一个创建的参数会很棒。也喜欢 Django。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
相关资源
最近更新 更多