3

オブジェクトをExhibit参照Galleryするオブジェクトがあり、どちらも Google App Engine データストアに保存されています。

(最終的には Django テンプレートで) 値を繰り返し処理するときにExhibit、各オブジェクトのコレクションをどのように並べ替えるのですか?Gallery

つまり、これは機能しません


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

テンプレートでレンダリングすると、ギャラリーは正しく並べられますが、展示は正しくありません。

4

1 に答える 1

4

App Engine が作成するコレクション プロパティに依存する代わりに、独自のクエリを作成する必要があります。

展示 = Exhibit.all().filter("gallery=", gallery).order("position")

または同等に、GQL で:

展示 = db.GqlQuery("SELECT * FROM 展示 WHERE ギャラリー = :1 ORDER BY 位置", ギャラリー)

展示品のリストのリストを渡すのではなく、テンプレート内からこれを実行できるようにしたい場合は、このクエリを実行する Gallery オブジェクトで単純なメソッドを定義し、テンプレートから参照することができます (例: 、{{gallery.exhibits_by_position}} は、Gallery オブジェクトで Exhibition_by_position() を実行し、その後、上記のクエリを実行できます)。

これによる速度への影響が心配な場合でも、心配する必要はありません。App Engine が作成するコレクション プロパティは、このためのシンタックス シュガーにすぎません。

于 2009-03-27T21:36:18.697 に答える