是否有任何方法可以同时为GAE数据存储区实体提供key_name和id?

时间:2011-10-24 19:35:41

标签: google-app-engine google-cloud-datastore

除了我生成的key_name之外,我还希望有一些其他属性,它们将作为id(我不想向用户显示key_name)。可以id吗?或者,如何生成唯一值而不是id

我将做什么 - 我将生成一个使用该ID和父键名称的URL。如果用户点击此链接,我将需要找到此数据存储区实体并进行更新。

这是当前的代码。

创建记录:

  item = Items.get_by_key_name(key_names=user_id, parent=person)
  if item is None:
    item = Items(key_name='id'+user_id, parent=person)

获取记录:

item = Items.get_by_key_name(key_names=user_id, parent=person)

user_id应隐藏。

2 个答案:

答案 0 :(得分:3)

我可能错了,因为您的要求不明确,但对我来说,您应该使用以下方法将密钥传递给视图:

item.key()

然后你可以将密钥传回控制器并轻松地检索给定的实体:

item = Items.get(key)

答案 1 :(得分:3)

实体只有一个密钥名称或ID - 从不两者兼而有之。您可以使用指向目标实体的单个ReferenceProperty创建一个实体,并使用其ID作为标识符,但实际上没有理由不向用户显示关键名称 - 一个编写良好的应用程序不应该依赖于此值保密。

请注意,从字符串编码密钥中提取密钥名称(以及有关密钥的其余信息)非常容易。