2017-05-09 1 views
1

Ich habe eine Eins-zu-viele-Beziehung NDB-Entity-Modell S/W-Post-und Kommentar-Modelle. Ich versuche, den Kommentar aus der Kommentarliste zu entfernen, nachdem ich die Kommentarentität aus db gelöscht habe. Unten ist mein Code zum Löschen Kommentar:Warum ValueError beim Löschen eines KeyProperty-Typs in eine Eins-zu-viele-Beziehung. Wie man es repariert?

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

ich die Störung erhalte wie:

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

Aber auf Datastore-Viewer ich dort den Kommentar sehen:

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

Beitrag Modell :

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 Auf einem similar question scheint es zu funktionieren.

+1

das Versuchen Umwandlung ID zu einem int 'idx = post.comments.index (ndb.Key ('Kommentar', int (Kommentar_ID)))'. Die Fehlermeldung weist darauf hin, dass es als Zeichenfolge interpretiert wird. Auch die optionale '_app' im Viewer ist eher ungewöhnlich. Wie wurde der Kommentar erstellt? Passt "dev ~ testData2" zu Ihrer App? –

+0

das das Problem behoben. Vielen Dank – ravi

Antwort

1

Umwandlung des Kommentars in eine Antwort.

Die Fehlermeldung zeigt, dass comment_id als String interpretiert wird, nicht als lang/int (emphasis mir):

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

Während der Datenspeicher-Eintrag entspricht eine lange Schlüssel-ID:

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

So werfen nur explizit comment_id zu einer Zahl:

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