2012-04-21 14 views
0

私の問題は簡単です。私はModel_AModel_Bを持っている:AppEngine Pythonがすべての参照を取得する

class Lobby(db.Model): 
    name = db.StringProperty() 

class UserModel(db.Model): 
    name = db.StringProperty() 
    lobby = db.ReferenceProperty(Lobby, collection_name="lobby") 

今、私はストレージから/すべてLobbyエンティティを取得し、私は、各ロビーのために関連したユーザーにアクセスできるようにします。私はlobby_entity.aUsersと呼ぶことでそれを行うことはできません。

これはどのように達成されましたか?

答えて

1

使用GQL:あなたはロビーの多くを持っている場合、これはうまく動作しないことを

lobbies = Lobby.all().fetch(10) 
keys = [lobby.key() for lobby in lobbies] 
q = aUser.gql('WHERE lobby IN :1', keys) 
users = q.fetch(1000) 

注意。 INクエリは最大30の値しかサポートしません。 (https://developers.google.com/appengine/docs/python/datastore/gqlreference)

PS。モデルクラス名は小文字で始まらないでください。 PEP 8をチェックしてください。

+0

おそらく30以上のロビーがあります。 –

+1

あなたの最善の策は、情報を非正規化して、各ロビーにユーザーのリストをKeyListPropertyに記録することです。ユーザーがロビーに出入りする際にこれを更新します。これは、ロビーあたり数百人のユーザーに有効で、ロビーの数に制限はありません。新しいXGトランザクションは、このトランザクションに役立つかもしれません。 –

関連する問題