2017-05-09 1 views
1

J'ai un modèle d'entité NDB de relation un-à-plusieurs par rapport à des modèles de commentaire et de commentaire. J'essaie de supprimer le commentaire de la liste des commentaires après avoir supprimé l'entité de commentaire de DB. Voici mon code pour la suppression de commentaire:Pourquoi ValueError lors de la suppression d'un type KeyProperty dans une relation un-à-plusieurs. Comment le réparer?

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

Je reçois l'erreur comme:

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

Mais Datastore Viewer je peux voir le commentaire il y a:

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

modèle 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) 

H Sur un similar question il semble fonctionner.

+1

Essayez de convertir la ID à un int 'idx = post.comments.index (ndb.Key ('Comment', int (comment_id))). Le message d'erreur suggère qu'il est interprété comme une chaîne. En outre, le '_app 'facultatif affiché dans la visionneuse est plutôt inhabituel. Comment le commentaire a-t-il été créé? Est-ce que '' dev ~ testData2 '' correspond à votre application? –

+0

qui a résolu le problème. Merci – ravi

Répondre

1

Conversion du commentaire en réponse.

Le message d'erreur indique que comment_id est interprété comme une chaîne, et non comme une longue/int (Souligné par l'auteur):

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

Alors que l'entrée de magasin de données correspond à une longue ID clé:

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

Il suffit donc explicitement jeté comment_id à un certain nombre:

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