¿Cómo ordeno objetos referenciados a partir de una consulta Google App Engine almacén de datos?

StackOverflow https://stackoverflow.com/questions/691217

Pregunta

He Exhibit objetos que hacen referencia a objetos Gallery ambos de los cuales se almacenan en el almacén de datos de Google App Engine.

¿Cómo puedo solicitar la recogida Exhibit en cada objeto Gallery cuando llegue a su alrededor para iterar sobre los valores (en última instancia en una plantilla de Django)?

es decir. esto no funciona


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

Cuando mostrada en la plantilla, las galerías están clasificadas correctamente pero las exposiciones no lo son.

¿Fue útil?

Solución

En lugar de confiar en la propiedad de colección crea App Engine, que necesita para construir su propia consulta:

  

exposiciones = Exhibit.all (). Filtrar ( "galería =", galería) .order ( "posición")

O lo que es equivalente, en GQL:

  

exposiciones = db.GqlQuery ( "SELECT * FROM Exhibit DONDE galería =: 1 ORDER BY posición", galería)

Si usted quiere ser capaz de hacer esto desde dentro de la plantilla, en lugar de pasar en una lista-de-listas de exposiciones, se puede definir un método simple en el objeto de la Galería que ejecuta esta consulta, y hacer referencia a ella desde el plantilla (por ejemplo, {{}} gallery.exhibits_by_position ejecutará exhibits_by_position () en el objeto de la Galería, que puede entonces realizar la consulta anterior).

Si usted está preocupado por las implicaciones de esta velocidad, no se preocupe:. La propiedad de colección crea App Engine es simplemente azúcar sintáctica para este

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top