Come posso ordinare oggetti di riferimento da una query di Google App Engine datastore?
-
22-08-2019 - |
Domanda
Ho Exhibit
oggetti che fanno riferimento a oggetti Gallery
entrambi i quali sono memorizzati in Google App Engine datastore.
Come faccio a ordinare la collezione Exhibit
su ogni oggetto Gallery
quando arrivo in giro per l'iterazione sui valori (in ultima analisi, in un modello di Django)?
vale a dire. questo non funziona
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
Quando reso nel modello, le gallerie sono ordinate correttamente ma i reperti non sono.
Soluzione
Invece di basarsi sulla proprietà della raccolta crea App Engine, è necessario costruire la propria query:
= mostre Exhibit.all (). Filtrata ( "galleria =", galleria) .order ( "Posizione")
o, equivalentemente, in GQL:
mostre = db.GqlQuery ( "SELECT * FROM WHERE Exhibit galleria =: 1 ORDER BY in posizione", galleria)
Se si vuole essere in grado di fare questo dall'interno del modello, piuttosto che passando in un elenco-di-liste di mostre, è possibile definire un metodo semplice per l'oggetto Galleria che esegue questa query, e fare riferimento dal template (Ad esempio, {{}} gallery.exhibits_by_position eseguirà exhibits_by_position () sull'oggetto Gallery, che può quindi eseguire la query di cui sopra).
Se siete preoccupati per le implicazioni di velocità di questo, non ti preoccupare:. La proprietà collezione crea App Engine è lo zucchero semplicemente sintattico per questo