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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top