您当然应该将所有包含用户特定数据的实体存储在用户的实体组中。这使您能够使用祖先查询检索和操作这些实体,这比非祖先查询执行得更好。
要使详细实体成为用户实体组的一部分,您只需使用parent
参数创建它们。例如:
class TwitterData(db.Model):
twitter_name = db.StringProperty
def addTwitterData(user, twitter_name):
# User is an instance of users.User
new_twitter_entity = TwitterData(parent=user)
new_twitter_entity.twitter_name = twitter_name
new_twitter_entity.put()
现在,我可以像这样获取用户的数据:
twitter_accounts = TwitterData.all().ancestor(user).fetch(1000)
此外,您可以使用kindless 祖先查询来获取用户实体组中的所有实体:
all_networks = db.Query()
all_networks.ancestor(user).fetch(1000)
# Now, ancestor has all of user's Twitter, Facebook, Myspace accounts.
这种方法的优势之一是它允许您的用户在任何各种服务中拥有多个帐户。
如果您需要为不同社交网站存储的数据差异太大而无法由单个简单模型提供服务,您可以使用Expando类来存储存储不同类型数据的实体。