Pergunta

Eu tenho objetos Exhibit que Gallery referência a objetos os quais são armazenados no Google App Engine Datastore.

Como posso encomendar a coleção Exhibit em cada objeto Gallery quando eu dar a volta a iteração sobre os valores (em última análise, em um modelo de Django)?

i. Isso não 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

Quando prestados no modelo, as galerias estão corretamente ordenados mas as exposições não são.

Foi útil?

Solução

Em vez de confiar na propriedade coleção App Engine cria, você precisa construir sua própria consulta:

= exposições Exhibit.all (). Filtro ( "galeria =", galeria) .order ( "posição")

ou equivalentemente, em GQL:

exposições = db.GqlQuery ( "SELECT * FROM Exhibit ONDE galeria =: 1 ORDER BY posição", galeria)

Se você quer ser capaz de fazer isso de dentro do modelo, ao invés de passar em uma lista de-listas de exposições, você pode definir um método simples sobre o objeto Gallery que executa esta consulta, e referenciá-lo a partir do template (por exemplo, {{gallery.exhibits_by_position}} irá executar exhibits_by_position () no objeto Gallery, que pode, em seguida, executar a consulta acima).

Se você está preocupado com as implicações de velocidade deste, não se preocupe:. A propriedade de coleção App Engine cria é o açúcar simplesmente sintática para este

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top