どのように私はGoogle App Engineのデータストアクエリから参照されるオブジェクトを注文するのですか?

StackOverflow https://stackoverflow.com/questions/691217

質問

私はExhibitは、Google App Engineのデータストアに格納されているどちらのオブジェクトを参照するオブジェクトをGalleryています。

どのように私は(最終的には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

テンプレートでレンダリングすると

、ギャラリーは、正しい順序が、展示品ではありませんされます。

役に立ちましたか?

解決

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

  

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

または同等に、GQLでます:

  

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

あなたはむしろ展示品のリスト・オブ・リストに渡すよりも、テンプレートの中からこれを行うことができるようにしたい場合は、

は、このクエリを実行ギャラリーオブジェクトの簡単な方法を定義し、からそれを参照することができますテンプレート(例えば、{{gallery.exhibits_by_position}}次に、上記のクエリ実行することができるギャラリーオブジェクト、上exhibits_by_position()を実行します)。

あなたはこの速度への影響を懸念している場合は、

、心配しないでください:プロパティのApp Engineが作成するコレクションは、単に、このための構文糖です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top