2012-04-21 39 views
0

我的問題很簡單。我有Model_AModel_BAppEngine Python獲取所有引用

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

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

現在我從存儲讀取A /所有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個大廳。 – 2012-04-22 10:11:19

+1

然後,您最好的選擇是對信息進行非規範化處理,並在每個大廳記錄KeyListProperty中的用戶列表。當用戶登入或退出大廳時更新此項。這應該適用於每個大廳數百個用戶,並且不限制大廳的數量。新的XG交易可能有助於實現這種交易。 – 2012-04-22 17:25:02