1

GAE データストアから何時間もエンティティを削除しようとしましたが、正常に機能しません。IDを使用してNDBエンティティを削除する方法とほとんど同じことをしましたか? 、しかし、問題は祖先関係にあると確信しています。

これは関連するコードです:

try:
 ndb.Key('NewsBase', int(self.request.get('delid'))).delete()

を印刷すると、正しい ID (データストアでチェック済み) のndb.Key (self.request.out.write...)ようなものが得られます。Key('NewsBase', 8008)ダッシュボードでは、「デコードされたエンティティ キー」も取得します。

NewsBase: name=mynews > NewsBase: id=8001

祖先情報を含める方法について少し混乱していますが、ここからわかる限り、NDB でキーを使用してエンティティを取得することは、まったく必要ありませんか?

編集: キーの作成方法

def news_key(base_name='mynews'):
    return ndb.Key('NewsBase', base_name)

    t = NewsBase(parent=news_key('mynews'))
    t.user = user
    t.put()
4

2 に答える 2

1

urlsafeID の代わりにキーのバージョンを使用してみてください。

キーを次のように出力します。

key.urlsafe()それ以外のkey.id()

リクエストハンドラーで次のように削除します。

ndb.Key(urlsafe=self.request.get('delkey')).delete()

キーのurlsafeバージョンには、必要な祖先情報がすべて含まれます。

また、あなたのnews_key関数はそれを作るキーが存在することを知っていますか? 存在しないエンティティの親キーを持つエンティティを格納しないでください。

あなたはnews_keyおそらくもっと似ているはずです:

 def news_key(base_name='mynews'):
    return NewsBase.get_or_insert(id=base_name).key

参考までに - 親を削除しても、すべての子が削除されるわけではありません。また、ここに示した方法では、エンティティの親はNewsBase別のNewsBaseエンティティになります。

于 2013-06-17T13:58:38.483 に答える