为什么在删除一对多关系的 KeyProperty 类型时出现 ValueError。如何解决?

Why ValueError when deleting a KeyProperty type to one-to-many relationship. How to fix it?

我有一对多关系 NDB 实体模型 b/w post 和评论模型。从数据库中删除评论实体后,我试图从评论列表中删除评论。下面是我删除评论的代码:

idx = post.comments.index(ndb.Key('Comment',comment_id))
post.comments.pop(pos) # Remove comment from comments list

我收到如下错误:

ValueError: Key('Comment', '6614661952700416') is not in list

但在 Datastore Viewer 上我可以看到评论:

[datastore_types.Key.from_path(u'Comment', 6614661952700416L, _app=u'dev~testData2')]

Post 型号:

class Post(ndb.Model):
    title = ndb.StringProperty(required=True)
    body = ndb.TextProperty(required=True)
    created = ndb.DateTimeProperty(auto_now_add=True)
    updated = ndb.DateTimeProperty(auto_now=True)

    author_id = ndb.KeyProperty(kind=User)

    comments = ndb.KeyProperty(kind=Comment, repeated=True)

这里 similar question 它似乎在工作。

正在将评论转换为答案。

错误消息表明 comment_id 被解释为字符串,而不是 long/int(强调我的):

ValueError: Key('Comment', '6614661952700416') is not in list

虽然数据存储条目对应于一个长密钥 ID:

[datastore_types.Key.from_path(u'Comment', 6614661952700416L, _app=u'dev~testData2')]

所以只需明确地将 comment_id 转换为一个数字:

idx = post.comments.index(ndb.Key('Comment', int(comment_id)))