Ich kann nicht verstehen, was dieser Fehler bedeutet und anscheinend hat niemand den gleichen Fehler im Internet bekommen
BadArgumentError: _MultiQuery mit Cursors erfordert
__key__
order
Das passiert hier:
%Vor% Die Eigenschaft source_key
ist offensichtlich ein Schlüssel und nodes_list
ist eine Liste der zuvor abgerufenen Entitätsschlüssel.
Was ich brauche, ist, alle SocialNotifications
zu finden, die ein Feld source_key
haben, das mit einem der Schlüssel in der Liste übereinstimmt.
Die Fehlermeldung versucht Ihnen mitzuteilen, dass Abfragen, die IN und Cursor betreffen, von __key__
(dem internen Namen für den Schlüssel der Entität) angeordnet werden müssen. (Dies ist erforderlich, damit die Ergebnisse ordnungsgemäß zusammengeführt und eindeutig gemacht werden können.) In diesem Fall müssen Sie Ihren .order()
-Aufruf durch .order(SocialNotification._key)
ersetzen.
Es scheint, dass dies auch passiert, wenn Sie nach einer Ungleichung filtern und versuchen, eine Seite zu holen.
(zB MyModel.query(MyModel.prop != 'value').fetch_page(...)
. Das bedeutet grundsätzlich (wenn ich etwas nicht verpasst habe), dass Sie fetch_page nicht verwenden können, wenn Sie einen Ungleichheitsfilter verwenden, da einerseits die Sortierung MyModel.prop
sein muss, andererseits aber MyModel._key
, was schwer ist:)
Ich habe die Antwort hier gefunden: Ссылка
Sie können Ihre Abfrage ändern in:
SocialNotification.query().order(-SocialNotification.date, SocialNotification.key).filter(SocialNotification.source_key.IN(nodes_list)).fetch_page(10)
um dies zum Laufen zu bringen. Beachten Sie, dass es langsam zu sein scheint (18 Sekunden), wenn nodes_list groß ist (1000 Entitäten), zumindest auf dem Entwicklungsserver. Ich habe nicht viel Test Daten auf einem Testserver.
Tags und Links google-app-engine google-cloud-datastore