2009-03-27 9 views
3

Google App Engine Datastoreに格納されているGalleryオブジェクトを参照するオブジェクトがExhibit個あります。Google App Engine Datastoreクエリから参照オブジェクトを注文するにはどうすればよいですか?

GalleryオブジェクトのExhibitコレクションは、(最終的にはDjangoテンプレートで)値を反復処理するときにどのようにして注文しますか?

すなわち、これは


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

の代わりにApp Engineは作成コレクションプロパティに頼って、あなたがあなた自身のクエリ構築する必要があります。

展示= Exhibit.allを()( "ギャラリー="、ギャラリー)フィルタ.ORDER(」位置 ")GQLで

または同等に、:

展示= db.GqlQuery(" 図表SELECT * FROM WHEREギャラリー=:位置1つのORDER BY」、ギャラリー)

テンプレート内からこれを行うには、展覧会のリストを渡すのではなく、このクエリを実行するギャラリーオブジェクトで単純なメソッドを定義し、それを参照できますテンプレートから(例えば、{{gallery.exhibits_by_position}}は、ギャラリーオブジェクト上でexhib_by_position()を実行し、上のクエリを実行することができます)。

このようなスピードの影響が懸念される場合は、App Engineが作成するコレクションプロパティは単純に文法的なものです。

+0

私は方法を使用することについて考えていない、大変感謝しています! – Brendan