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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top