Wie bestelle ich referenzierte Objekte aus einer Google App Engine-Datenspeicher-Abfrage?
-
22-08-2019 - |
Frage
Ich habe Objekte Exhibit
die Gallery
Referenzobjekte von denen beide in dem Google App Engine-Datenspeicher gespeichert werden.
Wie bestelle ich die Exhibit
Sammlung an jedem Gallery
Objekt, wenn ich um über die Werte iterieren (letztlich in einer Django-Vorlage)?
d. dies nicht funktioniert
class Gallery(db.Model):
title = db.StringProperty()
position = db.IntegerProperty()
class Exhibit(db.Model):
gallery = db.ReferenceProperty(Gallery, collection_name='exhibits')
title = db.StringProperty()
position = db.IntegerProperty()
galleries = db.GqlQuery('SELECT * FROM Gallery ORDER BY position')
for gallery in galleries:
gallery.exhibits.order('position')
# ... send galleries off the the Django template
Wenn in der Vorlage gerendert werden die Galerien richtig bestellt, aber die Exponate nicht.
Lösung
Statt sich auf die Sammlung Eigentum verlassen App Engine erstellt, müssen Sie Ihre eigene Abfrage erstellen:
= Exhibit.all Exponate (). Filtern ( "gallery =", Galerie) .order ( "Position")
oder äquivalent in GQL:
= db.GqlQuery Exponate ( "SELECT * FROM Exhibit WHERE gallery =: 1 ORDER BY-Position", Galerie)
Wenn Sie dies wollen in der Lage zu tun, aus dem Innern der Vorlage, anstatt in einer list-of-Listen von Exponaten vorbei, können Sie eine einfache Methode auf dem Gallery-Objekt definieren, die diese Abfrage ausgeführt wird, und verweisen Sie von der Vorlage (zB {{gallery.exhibits_by_position}} ausführen wird exhibits_by_position () auf dem Gallery-Objekt, das dann die Abfrage oben ausführen kann).
Wenn Sie besorgt über die Geschwindigkeit Auswirkungen dieser sind, keine Sorge. Die Sammlung Eigenschaft App Engine erstellt, ist einfach syntaktischer Zucker für diesen